ios - iOS Objective-C 中的多线程

标签 ios objective-c multithreading afnetworking

我对 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/

相关文章:

ios - 如果 TextView 很长,则启用 ScrollView 滚动

ios - RestKit 嵌套同类型对象 -- JSON 集合错误

ios - 升级SDK之后,代码会更改行为吗?

ios - 如何在swift中重载赋值运算符

objective-c - + (void) 初始化和内存问题

ios - 无法在 UIView 中将自定义类设置为 GLKView

objective-c - UITextField 占位符文本在 iOS13 暗模式下不可读

Java渲染循环和逻辑循环

java - TestNG 中的超时测试

c++ - 如何使这段代码中的线程独立运行