NSData dataWithContentsOfURL很慢

时间:2012-10-02 09:45:18

标签: iphone ios uiimage nsdata

我对NSData dataWithContentsOfURL ...

有一些性能问题
NSURL *url = [NSURL URLWithString:Imagepath];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *img=[UIImage imageWithData:data];
[ArrayImages addObject:img];

此代码放在一个方法中,该方法管理从NSUrl连接获得的JSON响应(在调用我的Web服务之后)。此方法中的所有代码都已经在后台线程中,将这段代码移出后台线程无法解决问题。所有检索到的图像都放在主线程的视图中。我可以做些什么来使dataWithContentsOfURL更快或有dataWithContentsOfURL的替代?

提前致谢

2 个答案:

答案 0 :(得分:2)

+[NSData dataWithContentsOfURL:]不是“慢”。如果加载一张图片需要很长时间,问题就出在其他地方。


评估您的问题。对于初学者:

  • 哪个资源是瓶颈?可能是网络。
  • 如何加载图片?一次全部?那会很糟糕 - 在他们准备就绪时展示它们。
  • 图像的大小是多少?我看到一个问题,海报想要加载 50 MB 图像。那太大了。同样,如果您只需要一个缩略图,那么请确保从服务器请求缩略图并加载该缩略图,而不是加载完整尺寸的图像。
  • 您是否正在加载甚至不需要展示的东西?等到你需要显示它们。
  • 您在网络任务中使用了多少个线程?对于CPU?对于I / O?
  • 您的源图片是否已正确“粉碎”?
  • 编写程序,使其随程序的演示模型一起流动。示例:我在表中显示了大量的图像,但我确保最大限度地减少资源使用,并确保应用程序能够很好地支持加载和请求取消。这一切都是通过网络传播的,而且速度非常快(它受网络限制)。

如果要从设备存储中加载许多图像,则应考虑使用-[UIImage initWithContentsOfFile:],因为您的图像数据不会被缓存,但可以被清除。

答案 1 :(得分:0)

你需要使用延迟加载来显示图像,因为当下载图像时会显示内容。

使用SDWebImage which uses lazy loading of images