3 回答
TA贡献1834条经验 获得超8个赞
您所看到的是使用下划线来区分实例变量和属性。因此,一个类声明可能是:
@interface Foo {
NSString* _label;
....
}
@property (nonatomic, retain) NSString* label; // notice: no underline
然后,在实现文件中,您将拥有:
@synthesize label=_label; // the property is matched with the ivar
现在,在实现内部,如果您想直接访问实例变量,则可以使用,_label而要使用属性访问器方法(该方法负责保留/释放以及其他一系列簿记任务)self.label。从外面看,您总是想要穿过该{object}.label物业。
另一种方法是不带下划线而仅使用:
NSString* label;
@property (nonatomic, retain) NSString* label;
...
@synthesize label;
它的工作原理相同,但那么它可能会混淆的人读的代码,并试图跟踪labelVS self.label。我个人觉得Apple约定(带下划线)更容易阅读,但这是优先选择的问题。
TA贡献1847条经验 获得超11个赞
正如人们已经说过的_someVar曾经说过,变量是私有的。这是一个简单的约定,并不重要。
另一个用途是,在C中使用Wayback机器旅行时,_function()表示该功能不是平台可移植的,而__function()则表示该功能不是编译器可移植的。因此,在标准C库中,有时会看到名称前带有_或__的变量,这就是这些函数所代表的含义。
- 3 回答
- 0 关注
- 418 浏览
添加回答
举报