gpt4 book ai didi

ios - iOS Objective-C 中的多线程

转载 作者:行者123 更新时间:2023-11-28 18:29:08 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com