同步从URL下载图像

时间:2014-04-30 22:41:06

标签: ios

我需要从网络上同步下载一个图像文件,它在异步线程中运行,并且该线程中的任务需要同步。

我考虑过使用+ (id)dataWithContentsOfURL:(NSURL *)aURL,但文档建议仅将其用于文件。

  

也可用于同步读取短文件

什么是好的选择?

3 个答案:

答案 0 :(得分:3)

如果您想要同步连接,可以使用:

+sendSynchronousRequest:returningResponse:error:

NSURLConnection的方法,它执行指定URL请求的同步加载。它返回URL请求的下载数据(在您的情况下为图像)。

答案 1 :(得分:0)

建议您不要同步获取大文件。它并不是建议这是同步获取大文件的坏机制,但是你不应该这样做。因此,如果你坚持忽略这些建议,那就使用这种机制。

对于记录:保持异步线程保持活动但在同步进程上阻塞比使用其中一个runloop-injecting异步机制(如NSURLConnection +sendAsynchronousRequest:...或委托方法)的功效更低。 Apple正在考虑电池寿命。

答案 2 :(得分:-2)

当您从网上加载数据时,您应该在几行之后阅读相同文档中的以下内容:

  

重要提示:请勿使用此同步方法来请求基于网络的网址。

所以,基本上,无论数据有多大,都不要将此方法用于网络请求!

正确的方法是使用NSURLConnectionNSURLSession。对于严肃的应用程序使用委托方法。

对于简单的应用程序(玩具和演示程序),您可以使用异步NSURLConnection方便的方法:sendAsynchronousRequest:queue:completionHandler:

没有理由使用NSURLConnection的同步方便类方法。它的用法是一种代码味道,因为它没有任何目的浪费系统资源。所以,根本就不要使用它!恕我直言,它根本不存在。