0

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

顺便说一句,我知道这是过时,但我们有遗留代码尚未迁移当您使用以下版本使用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]; 

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

+0

它是否会造成您的问题,或者您只是好奇? – Wain

+0

它不会导致任何问题,但我想确保操作不能在主线程上运行,并且应该在其他线程上分离。除非绝对需要,否则我不想在后台线程上调度。 – applefreak

回答

1

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

+0

谢谢Rob!它会在后台线程或主线程上运行吗? – applefreak

+0

根据定义,内部队列不是主队列。只有主队列在主线程上运行。 –

相关问题