Tha*_*nks 30 iphone cocoa cocoa-touch objective-c
我在Apple,UIPickerView.h中看过这个:
id<UIPickerViewDataSource> _dataSource;
Run Code Online (Sandbox Code Playgroud)
那为什么强调那里?它有特殊意义吗?我必须知道的一项公约?
Ree*_*sey 34
很多人将此用于私有变量,以区分对象中的私有变量和公共变量.
这是一种完全可选的工作方式.
Ram*_*min 28
您所看到的是使用下划线来区分实例变量和属性.所以类声明可能是:
@interface Foo {
NSString* _label;
....
}
@property (nonatomic, retain) NSString* label; // notice: no underline
Run Code Online (Sandbox Code Playgroud)
然后在实现文件中,您将拥有:
@synthesize label=_label; // the property is matched with the ivar
Run Code Online (Sandbox Code Playgroud)
现在,当在实现中时,如果你想直接访问实例变量,你可以使用_label但是要通过你将使用的属性访问器方法(它们负责保留/释放和一堆其他的簿记任务)self.label.从外面,您总是想要通过{object}.label酒店.
另一种方法是没有下划线,只使用:
NSString* label;
@property (nonatomic, retain) NSString* label;
...
@synthesize label;
Run Code Online (Sandbox Code Playgroud)
它的工作原理相同,但那么它可能会混淆的人读的代码,并试图跟踪labelVS self.label.我个人认为Apple公约(带下划线)更容易阅读,但这是一个偏好问题.
正如人们所说_someVar已经习惯说变量是私有的.这是一个简单的约定问题,并不重要.
另一个用途,在C a _function()中的回程机器中进行一次旅行表示一个不是平台可移植的函数,__ function()表示一个不是编译器可移植的函数.因此,在标准C库中,您有时会看到名称前面带有_或__的变量,这就是这些函数所代表的含义.