合成属性和带下划线前缀的变量:这是什么意思?

合成属性和带下划线前缀的变量:这是什么意思?

这是什么意思?@synthesize window=_window;我知道一般来说这意味着'某个类'有一个窗口,但为什么要使用_window而不仅仅是window?这是名称空间吗?



Helenr
浏览 569回答 3
3回答

慕丝7291255

我将用基本的英语来描述这个编程约定。在其他语言中,将成员变量命名为previous m,m_或者_将它们与本地声明的变量区分开,并在必要时表示它们应该写入访问器(no classInstance.m_Variable = 5),这是一种非常常见的约定。如果一个Objective-C程序员声明遵循这个约定的ivars(他们应该)并使用基本语法,@synthesize _window;那么该属性的用法会变得有点难看:classInstance._window = myWindow或者[classInstance set_window:myWindow]。使用语法@synthesize window=_window;允许的OBJ-C程序员利用一个流行的编程标准(前述与实例变量_,同时具有使用Apple标准属性访问)classInstance.window = myWindow和[classInstance setWindow:myWindow]。

德玛西亚99

这在iOS编程/ objective-C中是非常常见的事情,它与ivars有关。有关更多信息,请阅读此处:基于我在我的代码中养成这种习惯的经验,它有助于我在意思是自我时不小心写窗口。反之亦然(不必是窗口,但也不是任何其他变量)

慕村225694

简短的回答是:下划线只是一个有用的惯例,强调类变量对类的“私有”这一事实,你应该通过它们的属性访问它们。你可以在window没有前导下划线的情况下声明你的变量; 在这种情况下,@ synthetize语句将是简单的:@synthetize window,它实际上是相同的。对于很长的答案,aherlambang发布的链接非常有趣...
打开App,查看更多内容
随时随地看视频慕课网APP