使用全局调度队列时,为什么不调用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:]
希望有帮助吗?