当我执行以下操作时:
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; 在主线上。
答案 0 :(得分:3)
在第一种情况下,该队列将被一些工作线程耗尽,该线程很可能不会运行runloop。
在第二种情况下,队列将由应用程序的主线程耗尽,该主线程将运行runloop。所以委托方法在runloop上安排。
希望Apple能尽快为此提供基于队列和块的API。同时,您可能会考虑ASIHTTPRequest,它允许您在连接完成时(或失败时)向NSOperationQueue提交块。
或者您可以显式配置NSURLConnection以使用主线程的runloop(或者您知道的其他一些特定的runloop足够长)。请参阅 - [NSURLConnection - scheduleInRunLoop:forMode:]
希望有帮助吗?