Underscore prefix on property name?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
How does an underscore in front of a variable in a cocoa objective-c class work?
有人能给我解释一下下划线的用法吗?我一直认为它们是用来强调你正在访问ivar
1 2 3 4 5 | @property (nonatomic, retain) IBOutlet UIWindow *window; @property (nonatomic, retain) IBOutlet UILabel *markerLabel; @synthesize window = _window; @synthesize markerLabel = _markerLabel; |
在ivar名称中使用下划线是一种惯例,Apple首先使用下划线来区分实际的ivar和属性。自那以后,许多人通过了这项公约。
这样做的原因是为了防止错误地将一个新值赋给一个ivar而不是实际的setter:
1 | myIvar = newValue; |
而不是
1 | self.myIvar = myValue; |
如果不小心使用了上面的示例,可能会导致内存泄漏。下划线可防止您犯该错误。
这是惯例,你的理解听起来不错。
这个约定的另一个优点是,不使用setter就不能意外地访问ivar,因为
1 | view = viewController.view ; // usually bad |
如果ivar是
不过,我通常不申报IVAR,只使用