当使用全局调度队列时,为什么NSURLConnection委托方法不会被调用?

问题描述:

当我做到以下几点:当使用全局调度队列时,为什么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; 在主线程上。

在第一种情况下,该队列将被大多数可能不会有runloop运行的工作线程耗尽。

在第二种情况下,队列由应用程序的主线程耗尽,该线程将运行一个runloop。所以委托方法在该runloop上被调度。

希望Apple很快就会提供一个基于队列和块的API。同时,你可能会想到ASIHTTPRequest,它允许你在连接完成时(或失败时)将块提交给NSOperationQueue。或者你可以明确地配置NSURLConnection来使用主线程的runloop(或者你知道的其他一些特定的runloop足够长)。看到 - [NSURLConnection - scheduleInRunLoop:forMode:]

希望有帮助吗?