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

Objective c 带下划线前缀的合成属性和变量:这是什么意思?,objective-c,cocoa-touch,ios,properties,Objective C,Cocoa Touch,Ios,Properties,可能重复: 这是什么意思@synthetic window=\u window我知道,一般来说,它意味着“某个类”有一个窗口,但为什么要使用\u window,而不仅仅是window?这是名称空间的事情吗?这是iOS编程/objective-C中非常常见的事情,它与IVAR有关。有关更多信息,您可以在此处阅读: 根据我在代码中使用此习惯的经验,当您指self.window时,它会帮助我意外地编写window,反之亦然(不一定是window,但也可以是任何其他变量)简短的回答是:下划线只是一

可能重复:


这是什么意思<代码>@synthetic window=\u window我知道,一般来说,它意味着“某个类”有一个窗口,但为什么要使用
\u window
,而不仅仅是
window
?这是名称空间的事情吗?

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


根据我在代码中使用此习惯的经验,当您指self.window时,它会帮助我意外地编写window,反之亦然(不一定是window,但也可以是任何其他变量)

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

您可以声明
窗口
变量,而不使用前导下划线;在本例中,@synthetize语句将简单地表示为:
@synthetize window
,实际上是相同的


对于详细的答案,aherlambang发布的链接非常有趣,请阅读……

我将尝试用基础英语描述这种编程惯例

在其他语言中,使用前面的
m
m
命名成员变量是一种非常常见的约定,以将它们与本地声明的变量区分开来,并表示它们应该编写访问器(如有必要)(no
classInstance.m_Variable=5


如果Objective-C程序员按照此约定声明IVAR(他们应该这样做),并使用基本语法
@synthesis\u窗口
然后属性的用法变得有些丑陋:
classInstance.\u window=myWindow
[classInstance set\u window:myWindow]
。使用语法
@synthesis window=\u window
允许Obj-C程序员使用流行的编程标准(前面的IVAR带有
\uu
),同时具有使用Apple标准
classInstance.window=myWindow
[classInstance setWindow:myWindow]
的属性访问器。查看此相关问题:重复: