3

當我做到以下幾點:當使用全局調度隊列時,爲什麼NSURLConnection委託方法不會被調用?

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, NULL), ^{ 
    create NSURLRequest; 
    create NSURLConnectionDelegate; 
    create NSURLConnection; 
    start NSURLConnection; 
}); 

委託的方法永遠不會被調用。 但是,當我做

dispatch_async(dispatch_get_main_queue(), ^{ 
    create NSURLRequest; 
    create NSURLConnectionDelegate; 
    create NSURLConnection; 
    start NSURLConnection; 
}); 

他們確實被調用。爲什麼?

UPD

http://developer.apple.com/library/ios/#qa/qa1712/_index.html

現在我 創建NSURLConnection的; 啓動NSURLConnection; 在主線程上。

回答

3

在第一種情況下,該隊列將被大多數可能不會有runloop運行的工作線程耗盡。

在第二種情況下,隊列由應用程序的主線程耗盡,該線程將運行一個runloop。所以委託方法在該runloop上被調度。

希望Apple很快就會提供一個基於隊列和塊的API。同時,你可能會想到ASIHTTPRequest,它允許你在連接完成時(或失敗時)將塊提交給NSOperationQueue。或者你可以明確地配置NSURLConnection來使用主線程的runloop(或者你知道的其他一些特定的runloop足夠長)。看到 - [NSURLConnection - scheduleInRunLoop:forMode:]

希望有幫助嗎?

相關問題