如果你从 Interface Builder 拖一个新的 outlet 到一个接口(头)文件,Xcode 4.6 会自动为你创建一个属性...
在 iOS (Cocoa Touch) 上,它看起来像这样:
@property (weak, nonatomic) SomeClass *someProperty; //nonatomic accessors
而在 OS X (Cocoa) 上它看起来像这样:
@property (weak) SomeClass *someProperty; //atomic accessors (implicitly)
为什么?
编辑:我不是在问 atomic 做什么或不做什么,我很清楚同步指令和保证 setter 和 getter 原子性的底层互斥锁(或锁或其他)。我知道在 iOS 上,访问器是非原子的,因为 UIKit 不是线程安全的,因此使它们成为原子没有任何好处,这只是浪费处理器时间和电池寿命。我在这里谈论的是默认情况,知道自己在做什么的程序员会知道何时需要使访问器原子化。
所以我问为什么它们在 OS X 上默认是原子的。我的印象是 Appkit 也不是线程安全的。并且拥有原子访问器并不能保证线程安全,我什至可以说它是相反的,因为它可以给新手程序员带来线程安全的错觉,并通过延迟崩溃使并发应用程序中的错误跟踪更加困难到以后的时间,这样做使它们更难追踪。并且仅仅因为台式机相对强大并不意味着资源应该被浪费(注意我这里不是在谈论过早的优化),而且既然苹果工程师是合理的程序员,那么他们必须有一个很好的理由。决定让属性默认合成原子访问器。