对编程iOS应用程序相对较新,我发现从一些示例代码开始非常有用。 因此,我最终得到了一个.m文件,该文件以一些看起来像
的行开头@synthesize valueOne= _valueOne;
我注意到有这样的语法使得无法以编程方式设置valueOne的属性,例如做
之类的事情valueOne.tag = 3
因此,出于我自己的目的,我已经对“= _valueOne”部分进行了评估,对代码的功能没有任何明显的损害。
这种语法的意义是什么,以及我的示例代码的作者使用它的考虑因素是什么?
提前致谢
答案 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
一样。