UIImage的线程安全性

Evi*_*oer 5 objective-c thread-safety ios

我知道Apple正式建议UIKit仅用于主线程.但是,我也听说过自iOS 4.0以来UIImage是线程安全的.我找不到支持此声明的任何文档.

有没有人有任何信息来支持这种说法?作为用于存储数据和解码图像数据的类,如果设计良好,UIImage应该是线程安全的.

Eri*_*erg 27

直接来自Apple的UIImage文档

图像对象是不可变的,因此您无法在创建后更改其属性.这意味着您通常在初始化时指定图像的属性,或者依赖图像的元数据来提供属性值.它还意味着图像对象本身可以安全地从任何线程使用.更改现有图像对象属性的方法是使用一种可用的便捷方法来创建图像的副本,但具有所需的自定义值.

(强调我的)

因此,至少在截至2014年5月13日的当前版本的SDK中,"图像对象本身可以安全地从任何线程使用".

  • 这才是真正的答案 (3认同)

Poc*_*chi 5

确实,Apple建议在主线程上使用UIKIt中的元素:

注意:在大多数情况下,UIKit类只能从应用程序的主线程中使用.对于从UIResponder派生的类或者涉及以任何方式操纵应用程序的用户界面的类尤其如此.

由于UIImage不是从UIResponder派生的,因此您实际上并未在界面/屏幕上显示它.然后在另一个线程上使用UIImages进行操作应该是安全的.

这是基于我的经验,我没有看到任何关于它的官方文件.

  • 东西要么是线程安全的,要么不是.CGImage与UIImage的线程安全性差不多.UIImage的任何线程安全保证都不会引用摘录.它强烈建议不要使用UIResponder派生类,但对UIImage没有任何说法.不要认为它是安全的,因为它不是UIResponder.另一方面,[iOS 4的新功能](http://developer.apple.com/iphone/library/releasenotes/General/WhatsNewIniPhoneOS/Articles/iPhoneOS4.html)文档提到绘制UIImages并绘制UIImages从4.0起是线程安全的.所以抽离! (18认同)