【问题标题】:Synthesized property and variable with underscore prefix: what does this mean? [duplicate]带下划线前缀的综合属性和变量:这是什么意思? [复制]
【发布时间】:2011-08-28 07:14:40
【问题描述】:

可能重复:
Underscore prefix on property name?

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

【问题讨论】:

标签: objective-c cocoa-touch ios properties


【解决方案1】:

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

在其他语言中,使用前面的mm__ 来命名成员变量是一种非常常见的约定,以将它们与本地声明的变量区分开来,并表示它们应该在必要时编写访问器(没有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[classInstance setWindow:myWindow] 的属性访问器。

【讨论】:

    【解决方案2】:

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

    你可以声明你的window 变量而不带前导下划线;在这种情况下,@synthetize 语句很简单:@synthetize window,实际上是一样的。

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

    【讨论】:

      【解决方案3】:

      这是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 时,它可以帮助我意外编写 window ,反之亦然(不一定是 window,也可以是任何其他变量)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-07
        • 2012-10-12
        • 2011-09-03
        • 2011-03-20
        • 2011-05-22
        • 2011-07-31
        • 2017-07-26
        相关资源
        最近更新 更多