我有一个从网络加载的图像网格,但滚动时有一些滞后/断断续续。我正在使用异步ASIHTTPRequest
来发出请求,因此下载本身发生在一个单独的线程中,但由于UIKit不是线程安全的,一旦收到NSData
响应,我就有了在主线程上调用UIImage initWithData
。
分析表明,到目前为止,瓶颈包含UIImage initWithData
调用的内部PNG解析函数。我有兴趣在后台线程中执行此操作,因此主UI保持响应并且滞后时间较短。
但我不确定该怎么做。听起来正确的方向是使用CGImageRef
,因为Core Graphics是线程安全的,但我只看到CGImageCreateWithPNGDataProvider
和CGImageCreateWithJPEGGDataProvider
,而UIImage initWithData
支持大的列表图像类型。
我想要一些与UIImage initWithData
功能相同但没有线程安全问题的东西。
答案 0 :(得分:-1)
您可以安全地在后台线程中调用UIImage
initWithData
。作为一个好的经验法则,在后台线程中你不能做的是改变用户界面元素。在这种情况下,您不应该设置image
的{{1}}属性,或者在后台线程中为超级视图添加UIImageView
。
但是,创建UIImageView
实例是安全的,并且没有任何问题。