我对 iOS Objective-C 中的多线程有疑问。我从未在线程上工作过。 在我的应用程序中,我有几个任务只需要在后台运行,这样 UI 就不会被卡住。 以下是代码片段,
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
[self someFunctionCallinWebservice];
dispatch_async(dispatch_get_main_queue(), ^(void){
//UI Updates
});
});
在上面的代码中,函数:someFunctionCallinWebservice 调用了我正在使用 AFNetworking 库的 webservice。在 web 服务中,如果它成功,那么我将在本地保存数据。我在成功 block 中调用一个函数来保存从服务器发送的数据,如下所示,
[manager POST:url parameters:parameter success:^(AFHTTPRequestOperation *operation, id responseObject){
[self functionToSaveData:someArray];
}
此处 someFunctionCallinWebservice 在后台运行,但 [self functionToSaveData:someArray]
在前台运行。我应该在后台线程中也有这个 functionToSaveData 吗?
我的意思是,如果我在后台调用一个函数,那么该函数的所有相关功能,如调用服务器、获取数据和保存数据,也必须在后台线程中进行,对吗?为什么我要重新创建一个线程?
请帮忙...
最佳答案
是的,您可以在后台 线程中调用 functionToSaveData 函数,这不会产生任何问题,但是如果您想要进行任何 UI 更新(例如:-> 重新加载 tableView,显示或隐藏某些 View )那个时候你必须在主线程上做,否则它不会对你的用户界面产生任何影响。
dispatch_async(dispatch_get_main_queue(),^{
//Do any UI updates here
});
编辑 Swift 4
DispatchQueue.main.async {
//Do any UI updates here
}
关于ios - iOS Objective-C 中的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38586988/