为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

慕仰1329654 2019-08-19 17:32:56

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

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



查看完整描述

3 回答

?
慕丝7291255

我将用基本的英语来描述这个编程约定。

在其他语言中,将成员变量命名为previous mm_或者_将它们与本地声明的变量区分开,并在必要时表示它们应该写入访问器(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]


查看完整回答
反对 回复 2019-08-19
?
德玛西亚99

这在iOS编程/ objective-C中是非常常见的事情,它与ivars有关。有关更多信息,请阅读此处:

基于我在我的代码中养成这种习惯的经验,它有助于我在意思是自我时不小心写窗口。反之亦然(不必是窗口,但也不是任何其他变量)


查看完整回答
反对 回复 2019-08-19
?
慕村225694

简短的回答是:下划线只是一个有用的惯例,强调类变量对类的“私有”这一事实,你应该通过它们的属性访问它们。

你可以在window没有前导下划线的情况下声明你的变量; 在这种情况下,@ synthetize语句将是简单的:@synthetize window,它实际上是相同的。

对于很长的答案,aherlambang发布的链接非常有趣...


查看完整回答
反对 回复 2019-08-19

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信