关于这个主题有很多问题,很多建议说不要在 dispatch_async 中使用 sendSynchronousRequest,因为它会阻塞线程,并且 GCD 将产生许多新的工作线程来服务所有同步 URL 请求。
似乎没有人对 iOS 5 [NSURLConnection sendAsynchronousRequest:queue:completionHandler:] 在幕后所做的事情有明确的答案。
我读过的一篇文章指出它“可能”进行了优化,并且“可能”使用了运行循环——但肯定不会为每个请求创建一个新线程。
当我在使用 sendAsynchronousRequest:queue:completionHandler 时暂停调试器时,堆栈跟踪如下所示:
..现在看来 sendAsynchronousRequest:queue:completionHandler 实际上正在调用 sendSynchronousRequest,当我使用异步方法而不是同步方法时,我仍然创建了大量线程。
是的,使用异步调用还有其他好处,我不想在这篇文章中讨论。
我感兴趣的是性能/线程/系统使用,如果我更糟的是使用 dispatch_async 内部的同步调用而不是使用异步调用。
我也不需要关于使用 ios4 异步调用的建议,这纯粹是出于教育目的。
有没有人对此有任何有见地的答案?
谢谢