这是什么意思? @synthesize window=_window;
我知道,一般来说,这意味着“某个班级”有一个窗口,但为什么要使用_window
代替window
?这是名称空间吗?
答案 0 :(得分:25)
我将用基本的英语来描述这个编程约定。
在其他语言中,使用前面的m
,m_
或_
命名成员变量是非常常见的惯例,以区别于本地声明的变量,并表示它们应该必要时编写访问者(无classInstance.m_Variable = 5
)。
如果Objective-C程序员声明遵循此约定的ivars(他们应该)并使用基本语法@synthesize _window;
,那么该属性的用法会变得有点难看:classInstance._window = myWindow
或[classInstance set_window:myWindow]
。使用语法@synthesize window=_window;
允许Obj-C程序员使用流行的编程标准(在_
之前的ivars),同时具有使用Apple标准classInstance.window = myWindow
和{{1}的属性访问者}。
答案 1 :(得分:4)
在iOS编程/ objective-C中这是很常见的事情,它与ivars有关。有关详细信息,请参阅此处:
Why rename synthesized properties in iOS with leading underscores?
How does an underscore in front of a variable in a cocoa objective-c class work?
根据我在我的代码中养成这种习惯的经验,当你的意思是self.window时,它会让我意外地编写窗口,反之亦然(不必是窗口,也不是任何其他变量)
答案 2 :(得分:3)
简短回答是:下划线只是一个有用的惯例,强调类变量对类是“私有”的,你应该通过它们的属性访问它们。
你可以在没有前导下划线的情况下声明你的window
变量;在这种情况下,@ synthetize语句将简单地:@synthetize window
,它实际上是相同的。
对于长篇答案,aherlambang发布的链接非常有趣......