2

这个约定有什么目的吗?

4

2 回答 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 回答