是原子还是非原子的?

时间:2016-09-13 18:28:25

标签: objective-c instance-variables

我在@interface HomePages () @property (assign, nonatomic) int state; @end 文件中声明了这个私有属性:

@implementation HomePages {
    int state;
}

出于效率原因,在实时渲染应用程序中,我想要消除getter / setter调用并将此属性更改为声明为这样的ivar:

atomic

然而,我无法弄清楚 - 这是ivar nonatomic还是atomic

从我的阅读中,我知道属性的默认状态是atomic,但似乎这些括号参数只能确定getter和setter的行为。 ivars不存在nonatomic / nonatomic的概念吗?它们都是{{1}}?

1 个答案:

答案 0 :(得分:2)

@property语法是创建getter和setter的便捷语法。在这种情况下,您可以告诉他们创建以原子方式或非原子方式访问ivar的方法。在幕后为您创建了一个处理访问的方法(如果需要,可以覆盖它,例如: - (int)getState {... your code ...}来覆盖getter)。

但是ivar只是一个变量,所以它是非原子的。没有代码可以将访问限制为原子或非原子。如果您使用@property创建属性并使用原子访问的ivar,并且在代码中的某处使用_state ivar,则情况也是如此。你绕过了访问者,它总是非原子的。