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

根據定義,內部隊列不是主隊列。只有主隊列在主線程上運行。 –

相關問題