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
或
命名成员变量是一种非常常见的约定,以将它们与本地声明的变量区分开来,并表示它们应该编写访问器(如有必要)(noclassInstance.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]
的属性访问器。查看此相关问题:重复: