关于iphone:为什么Cocoa-Touch类ivars具有领先的下划线字符?

Why do Cocoa-Touch class ivars have leading underscore character?

这个公约有什么目的吗?


有些开发人员使用以下方法"隐藏"IVAR的约定:

1
2
3
4
5
6
7
8
@interface

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

@implementation
@synthesize myString = _myString.

这样做是不允许直接访问ivar,并通过mystring属性强制所有访问。它是一种隐藏类内部并遵循面向对象封装原则的方法。


根据Cocoa的编码指南,苹果喜欢用下划线表示"私有"。

Avoid the use of the underscore character as a prefix meaning private, especially in methods. Apple reserves the use of this convention. Use by third parties could result in name-space collisions; they might unwittingly override an existing private method with one of their own, with disastrous consequences.

根据Objective-C编程语言,以下划线开头的方法名是保留的(这意味着即使您不使用cocoa,也可能保留它们):

Method names beginning with"_", a single underscore character, are reserved for use by Apple.

另外,C/C++约定是主要的下划线通常是为实现而保留的。很多人误解了这一点,并将"用于"任何"私有"的东西;这导致了在我们的代码库中的很大一部分中大量的"fullog()"调用的扩散,即使它调用了未定义的行为。

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