可能重复:
How does an underscore in front of a variable in a cocoa objective-c class work?
任何人都可以向我指出使用下划线的解释,我一直认为它们用于突出显示您正在访问iVar [_window release];
而不是通过setter / getter方法访问iVar {{ 1}}或[[self window] release];
我只是想验证我的理解是否正确。
[self.window release];
答案 0 :(得分:10)
对于ivar名称使用下划线是Apple首先使用的惯例,用于区分实际的ivar和属性。许多人已经采用了这个惯例。
这样做的原因是为了防止将新值分配给ivar而不是实际的setter的错误:
myIvar = newValue;
而不是
self.myIvar = myValue;
如果您不小心使用了顶部示例,则可能导致内存泄漏。下划线阻止你犯这个错误。
答案 1 :(得分:0)
这是一个惯例,你的理解听起来不错。
这个约定的另一个优点是你不能在不使用setter的情况下意外访问ivar,因为
view = viewController.view ; // usually bad
如果ivar是_view
而不是view
,将无法编译。
我通常不会声明ivar,只需使用@property
和@synthesize
。如果没有声明明确的ivar,编译器(至少是最近的一个)会自动生成ivar(具有相同的名称)。因此上面的代码编译没有问题,并且不用作防止不使用setter,但是你可以取消一行代码....这可能是一个不好的目标,我不建议你:p