Synthesized property and variable with underscore prefix: what does this mean?
Possible Duplicate:
Underscore prefix on property name?
这是什么意思?@synthesize window=_window;我知道,一般来说,它意味着‘某个类’有一个窗口,但为什么用_window而不是window呢?这是命名空间吗?
- 查看相关问题:stackoverflow.com/questions/3521254/…
- 重复:1 2 3 4 5等等…
我将尝试用基础英语描述这个编程约定。
在其他语言中,用前面的m、m_或_来命名成员变量是一种很常见的惯例,它将成员变量与本地声明的变量区分开来,并表示如果需要,成员变量应编写附件(没有classInstance.m_Variable = 5)。
如果一个Objective-C程序员按照这个约定声明了IVAR(并且应该这样做),并且使用了基本语法@synthesize _window;,那么该属性的用法就变得有些难看了:classInstance._window = myWindow或[classInstance set_window:myWindow]。使用语法@synthesize window=_window;允许obj-c程序员使用流行的编程标准(在使用_的ivars之前),同时拥有使用苹果标准classInstance.window = myWindow和[classInstance setWindow:myWindow]的属性访问器。
这是在IOS编程/Objective-C中非常常见的事情,它与IVARS有关。有关更多信息,请阅读以下内容:
为什么用前导下划线重命名iOS中的合成属性?
cocoa objective-c类中变量前面的下划线是如何工作的?
根据我在代码中有这个习惯的经验,当您指self.window时,它可以帮助我意外地编写window,反之亦然(不必是window,也可以是任何其他变量)。
简短的回答是:下划线只是一种惯例,它有助于强调类变量对类是"私有"的,您应该通过它们的属性访问它们。
您可以声明您的window变量而不使用前导下划线;在这种情况下,@synthetize语句将简单地为:@synthetize window,并且实际上是相同的。
长话短说来,阿赫勒芒发布的链接真的很有趣。