【发布时间】:2012-05-25 23:07:16
【问题描述】:
可能重复:
Prefixing property names with an underscore in Objective C
合成属性的时候发现有人在做:
@synthesize myVar = _myVar;
什么是“_myVar”,与简单地做有什么区别:
@synthesize myVar;
最后,什么时候我应该更喜欢第一个解决方案而不是最后一个解决方案?
谢谢 卢卡
【问题讨论】:
可能重复:
Prefixing property names with an underscore in Objective C
合成属性的时候发现有人在做:
@synthesize myVar = _myVar;
什么是“_myVar”,与简单地做有什么区别:
@synthesize myVar;
最后,什么时候我应该更喜欢第一个解决方案而不是最后一个解决方案?
谢谢 卢卡
【问题讨论】:
_myVar 在您的示例中真正是支持您的财产的 ivar 的名称。默认情况下,当您合成一个属性时,会为您创建一个同名的 ivar。因此,您可以使用您的属性通过 setter/getter 或 _myVar 设置您的 ivar 以直接访问您的变量(当然绕过 KVC/KVO)。
编辑: 来自苹果的Coding Guidelines for Cocoa
...在许多情况下,当您使用已声明的属性时,您还会合成 对应的实例变量。
确保实例变量的名称简明扼要地描述 属性存储。通常,您不应该访问实例变量 直接,而不是您应该使用访问器方法(您确实访问 实例变量直接在 init 和 dealloc 方法中)。为了帮助 发出信号,在实例变量名称前加上下划线 (_)...
【讨论】:
如果你想在 setter 和 getter 中使用一些现有的数据成员,那么可以这样指定。
例如@synthesize personName=pName;
这样,我们可以方便地使用 pName 而不是 personName。
【讨论】:
它是私有变量的名称。
请参阅我在另一个帖子中的回答:answer
【讨论】: