这个约定有什么目的吗?
问问题
758 次
2 回答
2
有一些开发人员通过以下方法使用以下“隐藏” ivars 的约定:
@interface
@private
NSString *_myString
@property (nonatomic, retain) NSString *myString;
@implementation
@synthesize myString = _myString.
这样做是不允许通过属性 myString 强制所有访问来直接访问 ivar。它是一种隐藏类内部结构并遵守面向对象封装原则的方法。
于 2010-08-23T00:49:05.393 回答
0
根据Cocoa 编码指南, Apple 喜欢使用下划线表示“私有” :
避免使用下划线作为前缀表示私有,尤其是在方法中。Apple 保留使用此约定。第三方使用可能会导致命名空间冲突;他们可能会在不知不觉中用自己的私有方法覆盖现有的私有方法,从而带来灾难性的后果。
以下划线开头的方法名称是根据The Objective-C Programming Language保留的(这意味着即使您不使用 Cocoa,它们也是保留的,大概):
以“_”(一个下划线字符)开头的方法名称保留供 Apple 使用。
此外,C/C++ 约定是(通常)为实现保留前导下划线。很多人误解了这一点,并将 _ 用于任何“私人”的东西;导致 _FooLog() 调用在我们的大部分代码库中激增,即使它调用了未定义的行为。
这样做的唯一原因是不鼓励在您自己的类中直接访问 ivar。使用 .防止其他类的 ivar 访问@private
。
于 2010-08-23T01:07:41.053 回答