【问题标题】:Objective-C @synthesize syntax [duplicate]Objective-C @synthesize 语法 [重复]
【发布时间】:2013-02-16 11:30:26
【问题描述】:

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

的行开头
@synthesize valueOne= _valueOne;

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

valueOne.tag = 3

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

这种语法的意义是什么,我的示例代码的作者在使用它时有什么考虑?

提前致谢

【问题讨论】:

标签: objective-c syntax synthesize


【解决方案1】:

此语法合成名称为 _valueOne 下的 valueOne 的支持 ivar。你可以简单地编写你的代码看起来像

_valueOne.tag = 3;

也就是说,通常认为尽可能使用属性访问器会更好,因此您通常会将其写为

self.valueOne.tag = 3;

值得注意的例外是当您在 -init-dealloc 或您自己的自定义 getter/setter 中时,您仍想直接使用 ivar。


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

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

【讨论】:

  • 谢谢,这很有帮助。
  • 我们真的需要另一个答案吗?
猜你喜欢
  • 1970-01-01
  • 2011-09-13
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 2013-11-29
  • 2013-10-05
相关资源
最近更新 更多