我需要从网络上同步下载一个图像文件,它在异步线程中运行,并且该线程中的任务需要同步。
我考虑过使用+ (id)dataWithContentsOfURL:(NSURL *)aURL
,但文档建议仅将其用于短文件。
也可用于同步读取短文件
什么是好的选择?
答案 0 :(得分:3)
如果您想要同步连接,可以使用:
+sendSynchronousRequest:returningResponse:error:
NSURLConnection的方法,它执行指定URL
请求的同步加载。它返回URL
请求的下载数据(在您的情况下为图像)。
答案 1 :(得分:0)
建议您不要同步获取大文件。它并不是建议这是同步获取大文件的坏机制,但是你不应该这样做。因此,如果你坚持忽略这些建议,那就使用这种机制。
对于记录:保持异步线程保持活动但在同步进程上阻塞比使用其中一个runloop-injecting异步机制(如NSURLConnection +sendAsynchronousRequest:...
或委托方法)的功效更低。 Apple正在考虑电池寿命。
答案 2 :(得分:-2)
当您从网上加载数据时,您应该在几行之后阅读相同文档中的以下内容:
重要提示:请勿使用此同步方法来请求基于网络的网址。
所以,基本上,无论数据有多大,都不要将此方法用于网络请求!
正确的方法是使用NSURLConnection
或NSURLSession
。对于严肃的应用程序使用委托方法。
对于简单的应用程序(玩具和演示程序),您可以使用异步类NSURLConnection
方便的方法:sendAsynchronousRequest:queue:completionHandler:
没有理由使用NSURLConnection
的同步方便类方法。它的用法是一种代码味道,因为它没有任何目的浪费系统资源。所以,根本就不要使用它!恕我直言,它根本不存在。