Objective-C @synthesize语法

时间:2013-03-01 20:48:29

标签: objective-c syntax synthesize

对编程iOS应用程序相对较新,我发现从一些示例代码开始非常有用。 因此,我最终得到了一个.m文件,该文件以一些看起来像

的行开头
@synthesize valueOne= _valueOne;

我注意到有这样的语法使得无法以编程方式设置valueOne的属性,例如做

之类的事情
valueOne.tag = 3

因此,出于我自己的目的,我已经对“= _valueOne”部分进行了评估,对代码的功能没有任何明显的损害。

这种语法的意义是什么,以及我的示例代码的作者使用它的考虑因素是什么?

提前致谢

1 个答案:

答案 0 :(得分:3)

此语法正在合成名为valueOne的{​​{1}}的支持ivar。您可以简单地将代码编写为

_valueOne

尽管如此,通常认为尽可能使用属性访问器更好,因此通常将其写为

_valueOne.tag = 3;

值得注意的例外情况是当您在self.valueOne.tag = 3; -init或您自己的自定义getter / setter时,您仍然希望直接使用ivar。


在ivar名称上使用带前缀的下划线通常被认为是一种很好的做法,因为这意味着如果您编写-dealloc并且您打算使用该属性,则会出现编译错误,而不是静默使用ivar。如果您打算使用ivar,可以使用下划线前缀,valueOne.tag = 3;

这是一种常见的做法,现代铿锵的自动合成行为将使用ivars的前导下划线样式。这意味着,如果您完全删除_valueOne.tag = 3;行,则其行为就像您拥有@synthesize一样。