在阅读Apple生成的模板代码以及文档时,我会看到_
(下划线)和__
(双下划线)。示例是检查核心数据选项时生成的代码:
@synthesize window = _window;
@synthesize managedObjectContext = __managedObjectContext;
@synthesize managedObjectModel = __managedObjectModel;
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator;
这是什么意思?我理解_
是指支持私有变量。 __
是什么意思?
答案 0 :(得分:1)
当您使用getter / setter方法以及何时直接访问ivar时,它常常令人困惑。
替代方案是将ivar命名为与财产不同。一种常见的方法是使用下划线为ivars名称添加前缀,如下所示 -
@interface RootViewController : UITableViewController
{
NSDate *_timestamp;
}
@property (nonatomic, retain) NSDate *timestamp;
要连接属性(其名称未更改),sythensize语句将获得一个额外选项:
@implementation RootViewController
@synthesize timestamp = _timestamp;
基本上,如果一个ObjectiveC程序员声明遵循此约定的ivars(他们应该)并使用基本语法@synthesize _window;
,那么该属性的用法会变得有点难看:classInstance._window = myWindow
或[classInstance set_window:myWindow]
。使用语法@synthesize window=_window;
允许Obj-C程序员使用流行的编程标准(在_
之前的ivars),同时具有使用Apple标准classInstance.window = myWindow
和{{1}的属性访问者}。
答案 1 :(得分:0)
Apple的文档建议不要在你的项目中使用单个下划线(因为它由apple本身保留:最着名的例子是_cmd)。但下划线是标识符私有性的传统c风格修饰符,因此双下划线是为变量创建私有标识符的解决方案。
Cocoa框架中大多数私有方法的名称都有 下划线前缀(例如,_fooData)将它们标记为私有。 从这个事实可以看出两条建议。
Don’t use the underscore character as a prefix for your private methods. Apple reserves this convention.