使用全局调度队列时,为什么不调用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:]

希望有帮助吗?