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。使用