gpt4 book ai didi

iphone - 如何在应该执行回调的后台线程中交换任务

转载 作者:行者123 更新时间:2023-11-29 11:16:26 25 4
gpt4 key购买 nike

我的应用程序应该更新其有关网络服务的信息。这项工作应该在一个单独的线程中完成。我不想从我的 ViewController 进行简单的异步调用,因为它们还有很多其他工作需要线程来完成。

如果收到并执行了所有响应,则另一个线程应该在我的 ViewController 上调用一个委托(delegate)。

你能给我一些实现它的技巧和基本知识吗?

最佳答案

您可以使用 NSURLConnection 来完成此操作,但代码非常复杂。

我编写了一个简单的类,用于在后台线程上发出异步 Web 请求。您可以在这里找到它:https://github.com/nicklockwood/RequestQueue

它的工作方式与 jsd 建议的 NSOperationQueue 类似(如果需要,您实际上可以将它与 NSOperationQueue 一起使用),但我认为您会发现它更易于使用。

以下是您如何使用我的类从 View Controller 发出请求:

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://someurl?foo=bar"]];
[[RequestQueue mainQueue] addRequest:request completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {

//do something with the response

}];

因为它使用 block ,所以您不需要创建委托(delegate)方法,您可以直接将处理代码放在回调中(我在其中放置了“do something with response”注释)。

该回调中的代码将在主线程上调用,因此在其中更新您的 UI 是安全的,但是它会在您实际启动请求几秒钟后调用,在它在后台完成下载之后 - 就像委托(delegate)方法。

关于iphone - 如何在应该执行回调的后台线程中交换任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9236828/

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