fuz*_*oat 11 cocoa-touch objective-c
任何人都可以向我指出使用下划线的解释,我一直认为它们用于突出显示您正在访问iVar [_window release];
而不是通过setter/getter方法访问iVar,[[self window] release];
或者[self.window release];
我只是想验证我的理解是正确.
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UILabel *markerLabel;
@synthesize window = _window;
@synthesize markerLabel = _markerLabel;
Run Code Online (Sandbox Code Playgroud)
voi*_*dzm 10
对于ivar名称使用下划线是Apple首先使用的惯例,用于区分实际的ivar和属性.此后很多人都采用了这个惯例.
这样做的原因是为了防止将新值分配给ivar而不是实际的setter的错误:
myIvar = newValue;
Run Code Online (Sandbox Code Playgroud)
代替
self.myIvar = myValue;
Run Code Online (Sandbox Code Playgroud)
如果您不小心使用了顶部示例,则可能导致内存泄漏.下划线阻止你犯这个错误.
这是一个惯例,你的理解听起来不错。
此约定的另一个优点是,您不会在不使用 setter 的情况下意外访问 ivar,因为
view = viewController.view ; // usually bad
Run Code Online (Sandbox Code Playgroud)
_view
如果 ivar代替 则不会编译view
。
不过,我通常不声明 ivar,而只使用@property
and @synthesize
。如果没有显式声明 ivar,编译器(至少是最近的一个)会自动生成 ivar(具有相同的名称)。因此上面的代码编译没有问题,并且不能防止不使用 setter,但是您可以去掉一行代码......这可能是一件坏事,我不推荐给你:p
归档时间: |
|
查看次数: |
7140 次 |
最近记录: |