实例变量,默认为原子

时间:2010-07-27 05:18:25

标签: iphone

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

1 个答案:

答案 0 :(得分:0)

属性声明中的atomic关键字具有双重功能 - 它既是文档,也是合成访问器的指令。该关键字仅适用于访问器方法 - 手动访问ivars与访问C结构基本相同,并且绝不是原子的。

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

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