我们正在编写一个大量使用NSURLConnection的SDK。为了管理所有这些连接(例如,大规模取消它们),最好是它们都在单个线程(最好是主线程)上运行。由于NSURLConnection的异步特性,这不是一个糟糕的想法 - 在我们的独立应用程序中,我们所有的连接都在主线程上运行,并且在连接之后在辅助线程上执行繁重的操作(实际上,使用GCD或操作队列)得到的结果,没有任何停滞。
所以问题是 - 在哪种情况下用户想要在多个线程上运行连接,以及在不是主线程的线程上?
编辑:我想我没有正确解释自己。我们在异步中使用NSURLConnection,而非同步时尚。这允许我们在不阻塞UI的情况下运行主线程上的所有连接。问题是:我们SDK的用户何时希望异步和在不同的线程上运行这些连接?答案 0 :(得分:1)
如果您有一个加载大量数据的请求,并且您确定它会很慢,并且您有一个需要经常呈现的GUI。
这种情况如果GUI(如在Cocoa中,GUI在主线程中更新)在主线程中更新,请求太慢可能导致所有视图停止显示,因为它们没有更新。 / p>
Apple文档也说了这个关于sendSynchronousRequest:returningResponse:error:
重要提示:由于此调用可能需要几分钟才能失败(特别是在iOS中使用蜂窝网络时),因此不应该从GUI应用程序的主线程中调用此函数。
答案 1 :(得分:1)
我可以想象在另一个线程上运行异步NSURLConnection的唯一原因是你的委托方法本身是非常耗时的。即使这样,我仍然可能在主线程上运行它,并将处理移动到后台队列。
编辑:请注意,今天“将处理移动到后台线程”非常容易。在GCD之前,这有点困难,因此在这种情况下,在辅助线程上运行NSURLConnection本身会更有用。当您将NSURLConnection嵌入到不在主线程上处理runloop的C ++应用程序时,它仍然有用(这基本上只适用于Mac应用程序)。
我相信您理解,NSURLConnection已经管理了自己的后台线程供其内部使用。
简而言之,我相信你对此的直觉是正确的。答案是“几乎从不”。 NSURLConnection在主线程上最容易管理。