Objective-C:访问主UI线程之外的属性

时间:2014-07-18 08:18:47

标签: objective-c multithreading cocoa-touch

在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

谢谢:)

2 个答案:

答案 0 :(得分:3)

属性上的原子和非原子mutators会影响读/写行为。使用原子属性,每个读/写都是同步的(因此一次只允许一个操作)。

您可以从后台线程访问非原子属性,在大多数情况下,它不会破坏任何内容。您必须小心更改UI对象的属性。必须在主线程上完成这些更改才能生效。

答案 1 :(得分:2)

atomicIBOutlet一起使用将为您提供线程安全的设置程序,使用nonatomic将为您提供不安全的设置程序。
所以,我的问题是:如果我将属性更改为原子,那么我可以在主UI线程之外访问,对吧?如果我这样做,我会遇到一些问题吗?
是的,除非你在主线程上调用[view setNeedsDisplay](在后台进行一些更改后)来更新UI(或避免在后台线程上访问它),否则你会遇到一些问题。 Atomic只是一个互斥锁。