我在@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}}?
答案 0 :(得分:2)
@property语法是创建getter和setter的便捷语法。在这种情况下,您可以告诉他们创建以原子方式或非原子方式访问ivar的方法。在幕后为您创建了一个处理访问的方法(如果需要,可以覆盖它,例如: - (int)getState {... your code ...}来覆盖getter)。
但是ivar只是一个变量,所以它是非原子的。没有代码可以将访问限制为原子或非原子。如果您使用@property创建属性并使用原子访问的ivar,并且在代码中的某处使用_state ivar,则情况也是如此。你绕过了访问者,它总是非原子的。