首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSUrlConnection ASynchronous到底是什么意思?

NSUrlConnection ASynchronous到底是什么意思?
EN

Stack Overflow用户
提问于 2009-11-10 19:21:15
回答 4查看 8.1K关注 0票数 9

我搞不懂Synchronous NSUrlConnection和ASynchronous NSUrlConnection有什么区别?有没有Synchronous或ASynchronous?如果我们在connectionDidFinishLoading方法中使用detachNewThreadSelector,它是ASynchronous NSUrlConnection吗?哪种方法是最好的?任何教程...

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-11-10 20:31:58

同步意味着您触发NSURLConnection请求并等待它完成。

异步意味着您可以在NSURLConnection下载数据的同时触发请求和执行其他操作。

哪个是“最好的”?

同步非常简单:您设置它,启动它,然后等待数据返回。但是在下载完所有数据、发生错误或请求超时之前,您的应用程序什么也不做。如果您处理的数据超过了少量数据,您的用户将坐在那里等待,这将不会带来良好的用户体验。

异步只需要多做一点工作,但是用户可以在请求做自己的事情时做其他事情,这通常是更可取的。您设置了一些委托方法,使您可以跟踪传入的数据,这对于跟踪下载进度很有用。对于大多数用例,这种方法可能更好。

您可以使用NSURLConnection进行同步和异步请求。苹果公司的documentation对这两种方法和后一种方法所需的委托方法进行了清晰的解释。

票数 22
EN

Stack Overflow用户

发布于 2009-11-10 20:47:54

看起来你把同步/异步连接和线程混为一谈了。在我的应用程序中,我使用异步连接作为线程的替代方案。

假设您想要下载一个大文件,而不会导致UI冻结。您有两个基本选项:

  1. 异步连接。你从+ connectionWithRequest:delegate: (或其他非自动释放选项)开始,它会下载文件的一小部分,当有趣的事情发生时调用你的代理。运行循环仍在运行,因此您的UI保持响应。当然,您必须小心,不要让您的代理退出scope.
  2. Synchronous.您使用+ sendSynchronousRequest:returningResponse:error:启动连接,但代码会一直等待,直到下载完成。您确实需要派生一个新线程(或者Cocoa支持的更高级别的线程操作之一),否则UI将阻塞。

哪个选项是“最好的”或最不痛苦的将取决于您的应用程序的体系结构和您试图实现的目标。如果您无论如何都需要为一个长时间运行的进程创建一个线程,那么您可以使用第二种方法。一般来说,我会说第一种选择是最简单的。

这一切都很好,documented on Apple's Developer site

票数 10
EN

Stack Overflow用户

发布于 2009-11-10 22:14:33

在其他响应中没有提到的是请求的大小。例如,如果您正在下载一个大文件,那么使用异步连接会更好。您的代理将在数据块到达时收到这些数据块。相比之下,synchronous方法将等待所有数据,然后才能将其提供给您。代理可以更快地开始处理响应(更好的用户体验),或者将其保存到文件而不是内存中(更好的资源使用)。您还可以选择停止响应,而不等待所有数据。

基本上,异步方法为您提供了对连接的更多控制,但代价是复杂性。同步方法要简单得多,但是不应该在主UI线程上使用,因为它会阻塞。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1707253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档