异步加载iPhone上的图像

时间:2012-02-18 04:15:51

标签: iphone cocoa-touch uiimage

我有一个从网络加载的图像网格,但滚动时有一些滞后/断断续续。我正在使用异步ASIHTTPRequest来发出请求,因此下载本身发生在一个单独的线程中,但由于UIKit不是线程安全的,一旦收到NSData响应,我就有了在主线程上调用UIImage initWithData

分析表明,到目前为止,瓶颈包含UIImage initWithData调用的内部PNG解析函数。我有兴趣在后台线程中执行此操作,因此主UI保持响应并且滞后时间较短。

但我不确定该怎么做。听起来正确的方向是使用CGImageRef,因为Core Graphics是线程安全的,但我只看到CGImageCreateWithPNGDataProviderCGImageCreateWithJPEGGDataProvider,而UIImage initWithData支持大的列表图像类型。

我想要一些与UIImage initWithData功能相同但没有线程安全问题的东西。

1 个答案:

答案 0 :(得分:-1)

您可以安全地在后台线程中调用UIImage initWithData。作为一个好的经验法则,在后台线程中你不能做的是改变用户界面元素。在这种情况下,您不应该设置image的{​​{1}}属性,或者在后台线程中为超级视图添加UIImageView

但是,创建UIImageView实例是安全的,并且没有任何问题。