为了账号安全,请及时绑定邮箱和手机立即绑定

什么时候在实例变量前加下划线

什么时候在实例变量前加下划线

iOS
开心每一天1111 2019-10-11 10:53:02
我已经在Apple的UIPickerView.h中看到了这一点:id<UIPickerViewDataSource> _dataSource;为什么在那里强调?它有特殊含义吗?我必须了解的公约?
查看完整描述

3 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

许多人将其用于私有变量,以区分对象中的私有变量和公共变量。

这是一种完全可选的工作方式。


查看完整回答
反对 回复 2019-10-11
?
MMMHUHU

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约定(带下划线)更容易阅读,但这是优先选择的问题。


查看完整回答
反对 回复 2019-10-11
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

正如人们已经说过的_someVar曾经说过,变量是私有的。这是一个简单的约定,并不重要。

另一个用途是,在C中使用Wayback机器旅行时,_function()表示该功能不是平台可移植的,而__function()则表示该功能不是编译器可移植的。因此,在标准C库中,有时会看到名称前带有_或__的变量,这就是这些函数所代表的含义。


查看完整回答
反对 回复 2019-10-11
  • 3 回答
  • 0 关注
  • 418 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信