【问题标题】:Asynchronously loading images on the iPhone在 iPhone 上异步加载图像
【发布时间】:2012-02-18 04:15:51
【问题描述】:

我有一个从网络加载的图像网格,但滚动时有一点延迟/卡顿。我正在使用异步ASIHTTPRequest 来发出请求,因此下载本身是在单独的线程中进行的,但由于 UIKit 不是线程安全的,一旦我收到NSData 响应,我必须调用@987654323 @ 在主线程上。

分析表明,到目前为止,瓶颈由UIImage initWithData 调用的内部PNG 解析函数组成。我有兴趣在后台线程中执行此操作,因此主 UI 保持响应性并且延迟更少。

但我不确定如何执行此操作。听起来正确的方向是使用CGImageRef,因为Core Graphics 是线程安全的,但我只看到CGImageCreateWithPNGDataProviderCGImageCreateWithJPEGGDataProvider,而UIImage initWithData 支持大量图像类型。

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

【问题讨论】:

    标签: iphone cocoa-touch uiimage


    【解决方案1】:

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

    但是,创建UIImage 实例是安全的,并且可以正常工作。

    【讨论】:

    • 老实说,我不知道它是否在文档中。不过,我从来没有遇到过问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    相关资源
    最近更新 更多