【问题标题】:Objective C - Synthesize property [duplicate]Objective C - 合成属性[重复]
【发布时间】:2012-05-25 23:07:16
【问题描述】:

可能重复:
Prefixing property names with an underscore in Objective C

合成属性的时候发现有人在做:

@synthesize myVar = _myVar;

什么是“_myVar”,与简单地做有什么区别:

@synthesize myVar;        

最后,什么时候我应该更喜欢第一个解决方案而不是最后一个解决方案?

谢谢 卢卡

【问题讨论】:

    标签: objective-c properties


    【解决方案1】:

    _myVar 在您的示例中真正是支持您的财产的 ivar 的名称。默认情况下,当您合成一个属性时,会为您创建一个同名的 ivar。因此,您可以使用您的属性通过 setter/getter 或 _myVar 设置您的 ivar 以直接访问您的变量(当然绕过 KVC/KVO)。

    编辑: 来自苹果的Coding Guidelines for Cocoa

    ...在许多情况下,当您使用已声明的属性时,您还会合成 对应的实例变量。

    确保实例变量的名称简明扼要地描述 属性存储。通常,您不应该访问实例变量 直接,而不是您应该使用访问器方法(您确实访问 实例变量直接在 init 和 dealloc 方法中)。为了帮助 发出信号,在实例变量名称前加上下划线 (_)...

    【讨论】:

    • 什么时候应该使用自动合成的 ivar,什么时候应该手动设置后备 ivar 变量?
    • 这完全取决于您。虽然,在 obj-c 中使用下划线前缀 ivars 是一种常见的做法,以便清楚地表明您是有意直接访问 ivar。如果有人能想到其他原因,我也很高兴得到启发。
    【解决方案2】:

    如果你想在 setter 和 getter 中使用一些现有的数据成员,那么可以这样指定。

    例如@synthesize personName=pName;

    这样,我们可以方便地使用 pName 而不是 personName。

    【讨论】:

      【解决方案3】:

      它是私有变量的名称。

      请参阅我在另一个帖子中的回答:answer

      【讨论】:

      • 你的意思是实例变量
      猜你喜欢
      • 2012-06-23
      • 2011-08-08
      • 2012-03-14
      • 2012-07-12
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 2013-03-25
      相关资源
      最近更新 更多