NSURLConnection sendAsynchronousRequest 在哪个线程上运行的 iOS

标签 ios nsurlconnection nsoperationqueue networkonmainthread

我正在使用以下代码进行网络调用。我知道响应将在 mainQueue 中运行,因为我已将队列参数指定为 [NSOperationQueue mainQueue] 但我想知道实际的 sendAsynchronousRequest 操作将在哪里执行。该操作是从 mainThread 调用的,那么它会在主线程上异步运行还是 NSURLConnection 自动创建后台线程?没有这方面的文档,iOS 工具也没有显示分离的后台线程,所以想知道它究竟是如何工作的! Apple 文档没有提供这方面的详细信息。

顺便说一句,我知道这已被弃用,但我们有遗留代码尚未迁移到使用 NSURLSession

[NSURLConnection sendAsynchronousRequest:urlRequest
                                   queue:[NSOperationQueue mainQueue]
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                           if(completion) {
                               completion(data, error);
                           }
                       }];

使用以下版本时同样的问题;

self.urlConnection = [NSURLConnection connectionWithRequest:urlRequest delegate:self];

这里也不确定这个请求在哪个线程上执行以及如何让这个异步运行!

最佳答案

NSURLConnection 使用自己的内部队列。它现在是 NSURLSession 的包装器,您可以通过在您的线程列表中查找 com.apple.NSURLSession-work 来找到队列(如果您有兴趣)。

关于NSURLConnection sendAsynchronousRequest 在哪个线程上运行的 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35584564/

相关文章:

ios - 离线 map 图 block 已停止显示

ios - 以编程方式快速创建动态高度 UIImageViews

cocoa - 如何使用安全 URL 将内容下载到 NSData 中?

ios - 尝试吗?数据(内容为 : URL) use caching?

iphone - 在后台获取核心数据

iOS 使用 NSBlockOperation 限制异步 API 调用

ios - 如何使用 Swift 取消队列中的下载

iphone - 当我在不同类别中有多个同名节点时,如何使用 NSXMLParser 读取 XML?

objective-c - 使用 des cbc 模式 obj-c 加密/解密字符串

objective-c - 从 objective-c 调用 asp.net web 服务以返回带有参数的 JSON 格式的数据