2010-07-27 127 views
0

我不太确定我是否正确理解原子。从我读的内容来看,它说原子是iPhone的默认设置。现在是仅用于属性或任何实例变量。例如,如果我有一个实例变量,我将编写自己的setter/getters,并且不将它声明为属性,那么是否会使该实例变量为原子?其缺点主要在于它针对线程进行了优化,而我的实例变量/应用程序可能甚至不需要?谢谢。实例变量,默认为原子

回答

0

属性声明中的atomic关键字具有双重责任 - 既是文档又是合成访问器的指令。关键字只适用于访问器方法 - 手动访问ivars基本上与访问C结构相同,并且从来不是原子的。

如果您使用属性声明语法,您仍然可以编写自己的访问器,但如果这样做,则应遵守声明(如果不声明nonatomic,则应手动实现原子性)。如果您的房产是@synthesize,他们将自动遵循您的声明。

原子属性的缺点是它们使用锁定,这非常昂贵 - 如果该属性不会被多个线程访问,则应该始终声明它为nonatomic(至少在iPhone上)。

+0

怎么样声明浮动属性?我认为任何32位结构在iPhone上默认是原子的 – Pochi 2012-06-18 05:42:52