Iphone 为什么NSURLConnection委托方法不';使用全局调度队列时,是否无法调用?
当我执行以下操作时:Iphone 为什么NSURLConnection委托方法不';使用全局调度队列时,是否无法调用?,iphone,ios,multithreading,nsurlconnection,grand-central-dispatch,Iphone,Ios,Multithreading,Nsurlconnection,Grand Central Dispatch,当我执行以下操作时: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, NULL), ^{ create NSURLRequest; create NSURLConnectionDelegate; create NSURLConnection; start NSURLConnection; }); 委托的方法永远不会被调用。 但当我这么做的时候 dispatch_async(dispat
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
现在我知道了
创建连接;
启动NSURL连接;
在主线程上。在第一种情况下,该队列将被一些工作线程耗尽,这些工作线程很可能不会运行runloop 在第二种情况下,队列由应用程序的主线程排出,主线程将运行runloop。因此,委托方法在该运行循环上得到调度 希望苹果不久将为此提供一个基于队列和块的API。同时,您可能会考虑,它允许您在连接完成时(或连接失败时)向NSOperationQueue提交块 或者,您可以显式配置NSURLConnection以使用主线程的runloop(或者您知道的其他特定runloop足够长)。请参阅-[NSURLConnection–ScheduleInUnloop:forMode:] 希望有帮助