Iphone 为什么Cocoa Touch类IVAR具有前导下划线字符?

Iphone 为什么Cocoa Touch类IVAR具有前导下划线字符?,iphone,cocoa-touch,naming-conventions,cocoa-design-patterns,Iphone,Cocoa Touch,Naming Conventions,Cocoa Design Patterns,此约定有什么用途吗?有些开发人员使用以下约定通过以下方法“隐藏”IVAR: @interface @private NSString *_myString @property (nonatomic, retain) NSString *myString; @implementation @synthesize myString = _myString. 这样做的目的是禁止直接访问ivar,强制通过属性myString进行所有访问。这是一种隐藏类内部并遵守面向对象封装原则的方法。苹果喜欢使用

此约定有什么用途吗?

有些开发人员使用以下约定通过以下方法“隐藏”IVAR:

@interface

@private
NSString *_myString
@property (nonatomic, retain) NSString *myString;

@implementation
@synthesize myString = _myString.

这样做的目的是禁止直接访问ivar,强制通过属性myString进行所有访问。这是一种隐藏类内部并遵守面向对象封装原则的方法。

苹果喜欢使用下划线来表示“私有”,根据:

避免将下划线字符用作表示私有的前缀,尤其是在方法中。苹果保留使用这一惯例。第三方使用可能导致名称空间冲突;他们可能会无意中用自己的方法覆盖现有的私有方法,从而带来灾难性的后果

以下划线开头的方法名称是根据保留的(这意味着即使您不使用Cocoa,它们也是保留的):

方法名以“\u1”(一个下划线字符)开头,保留供Apple使用

此外,C/C++的惯例是(通常)为实现保留前导下划线。很多人误解了这一点,把“私人”用在任何事情上;导致在我们的代码库的很大一部分中大量使用_foulog()调用,即使它调用了未定义的行为


这样做的唯一原因是不鼓励在您自己的类中直接访问ivar。使用
@private

禁止从其他类访问ivar是一个强有力的词,它使您在视觉上明显地看到您正在访问ivar,而不是访问器。没有任何内容阻止用户访问
\u myString
@Marcus。。。除了“私人指定”!从课堂上,还是从其他课堂上?这个类应该知道它的内部结构;其他类无法访问@private ivars。显然是从其他类访问的!!不管是谁离开了否决票,但很好地解释了为什么……看起来很反复无常……感谢大家的回答和讨论。有帮助。