为 ivar 使用另一个名称而不是属性的优点是,当您访问其中一个或另一个时,您可以在代码中轻松看到 - Andre K
我找不到“评论”按钮,所以我不得不发布为“答案”。
只是想扩展安德烈的评论-通过了解您何时使用合成属性与普通变量,您知道(尤其是在设置器的情况下)何时自动保留/复制/释放变量,这要归功于您的好设置器,而不是用手操纵。
当然,如果你做对了,你可能不需要 setter 的帮助来正确地保留/释放对象!但是在其他情况下,将您的 ivars 称为self.ivar
而不是_ivar
可能会有所帮助,例如当您使用自定义 setter/getter 而不是默认的合成方法时。也许每次你修改一个属性时,你也想把它存储到 NSUserDefaults 中。所以你可能有一些这样的代码:
@interface SOUserSettings : NSObject {
BOOL _autoLoginOn;
}
@property (nonatomic, assign) BOOL autoLoginOn;
@end
@implementation SOUserSettings
@synthesize autoLoginOn = _autoLoginOn;
- (void)setAutoLoginOn:(BOOL)newAutoLoginOnValue {
_autoLoginOn = newAutoLoginOnValue;
[[NSUserDefaults standardUserDefaults] setBool:_autoLoginOn forKey:@"UserPrefAutoLoginOn"];
}
@end
注意:这只是说明性代码,它可能有一千个错误!
所以现在,在你的代码中,如果你有一行说_autoLoginOn = YES
- 你知道它不会被保存到 NSUserDefaults,而如果你使用self.autoLoginOn = YES
你就知道会发生什么。
_autoLoginOn
和之间的区别self.autoLoginOn
不仅仅是语义上的。