在iOS上编程GUI时,属性通常声明为nonatomic
,因为我们通常只在主UI线程上访问这些属性(如在Android上)。
@interface TKDViewController : UIViewController
@property (nonatomic, strong) NSMutableArray *tableData;
@end
所以,我的问题是:如果我将属性更改为atomic
,那么我可以在主UI线程之外访问,对吧?如果我这样做,我会遇到一些问题吗?
@interface TKDViewController : UIViewController
@property (atomic, strong) NSMutableArray *tableData;
@end
谢谢:)
答案 0 :(得分:3)
属性上的原子和非原子mutators会影响读/写行为。使用原子属性,每个读/写都是同步的(因此一次只允许一个操作)。
您可以从后台线程访问非原子属性,在大多数情况下,它不会破坏任何内容。您必须小心更改UI对象的属性。必须在主线程上完成这些更改才能生效。
答案 1 :(得分:2)
将atomic
与IBOutlet
一起使用将为您提供线程安全的设置程序,使用nonatomic
将为您提供不安全的设置程序。
所以,我的问题是:如果我将属性更改为原子,那么我可以在主UI线程之外访问,对吧?如果我这样做,我会遇到一些问题吗?
是的,除非你在主线程上调用[view setNeedsDisplay]
(在后台进行一些更改后)来更新UI(或避免在后台线程上访问它),否则你会遇到一些问题。 Atomic只是一个互斥锁。