运行NSURLConnection sendAsynchronousRequest的iOS线程

时间:2016-02-23 17:44:59

标签: ios nsurlconnection nsoperationqueue networkonmainthread

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

BTW我知道这已被弃用,但我们还有遗留代码要迁移才能使用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];

这里也不确定此请求执行的线程以及如何异步运行!

1 个答案:

答案 0 :(得分:1)

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