L'avantage d'avoir un autre nom pour la Ivar que pour la propriété est que vous pouvez facilement voir dans le code lorsque vous accédez à l'un ou l' autre - Andre K
I Je ne suis pas capable de trouver un bouton 'commentaire', je dois donc poster comme 'réponse'. Je voulais simplement développer le commentaire d'André - en sachant quand vous utilisez les propriétés synthétisées par rapport à la variable vanille, vous savez (surtout dans le cas de setters) quand une variable est conservée/copiée/libérée automatiquement grâce à votre gentil setter, vs être manipulé à la main.
Bien sûr, si vous faites les choses correctement, vous n'avez probablement pas besoin de l'aide d'un setter pour conserver/libérer des objets correctement! Mais il peut y avoir d'autres scénarios où se référant à vos ivars comme self.ivar
au lieu de _ivar
peut être utile, comme lorsque vous utilisez des setters/getters personnalisés au lieu des synthétisés par défaut. Peut-être que chaque fois que vous modifiez une propriété, vous souhaitez également la stocker dans NSUserDefaults. Donc, vous pourriez avoir un code comme ceci:
@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
Note: Ceci est juste un code d'illustration, il pourrait y avoir mille choses mauvaises avec elle! Alors maintenant, dans votre code, si vous avez une ligne qui indique _autoLoginOn = YES
- vous savez qu'il ne va pas être enregistré dans NSUserDefaults, alors que si vous utilisez self.autoLoginOn = YES
, vous savez exactement ce qui va se passer.
La différence entre _autoLoginOn
et self.autoLoginOn
est plus que simplement sémantique.
Merci pour la réponse rapide. Hm ... ok, sont [self.dummyLabel setText: @ "..."] et [_dummyLabel setText: @ "..."] faire le quelque chose? Si c'est le cas, je ne vois aucun gros avantage à renommer _dummyLabel en dummyLabel. – Thomas
@Thomas, vous l'avez. –
L'avantage d'avoir un autre nom pour l'ivar que pour la propriété est que vous pouvez facilement voir dans le code lorsque vous accédez à l'un ou l'autre. –