在ios3(3.1.2及更高版本)下,以下属性线程的访问是否安全?
谢谢
答案 0 :(得分:2)
这些属性都声明为nonatomic
,这意味着它们没有多线程访问保护措施。当然,欢迎您在多个线程上访问这些属性,但这样做会让您自担风险。
这是关于此的documentation。如果声明的属性没有nonatomic
,则在获取和设置值期间将使用锁定,从而保证一次只有一个线程正在访问该值。正如您所料,这会对性能造成轻微影响。当属性声明为nonatomic
时,它只是意味着没有使用锁。欢迎您从任何您喜欢的线程中获取和设置属性值。但是,与任何多线程值访问一样,可能会对该属性进行线程争用,这可能(在某些情况下)导致未定义的行为。
通常,但是,您不必太担心这个问题。这实际上仅适用于其值可以从多个线程设置的属性。您感兴趣的属性(UIImage.size
,UIImage.CGImage
,UIColor.CGColor
)都声明为readonly
,这意味着从访问这些值时无需担心多个线程,同时或以其他方式。