Il vantaggio di avere un altro nome per l'Ivar rispetto per la proprietà è che si può facilmente vedere nel codice quando si accede a uno o l' altro - Andre K
I Non riesco a trovare un pulsante "comment", quindi devo pubblicare una "risposta".
Volevo solo ampliare il commento di Andre - sapendo quando si utilizzano le proprietà sintetizzate rispetto alla variabile vaniglia, si sa (specialmente nel caso di setter) quando una variabile viene mantenuta/copiata/rilasciata automaticamente grazie al proprio setter, contro essere manipolato a mano.
Ovviamente se stai facendo le cose nel modo giusto, probabilmente non hai bisogno dell'aiuto di un setter per conservare/rilasciare correttamente gli oggetti! Ma ci possono essere anche altri scenari in cui il riferimento ai tuoi ivars come self.ivar
invece di _ivar
può essere utile, ad esempio quando si utilizzano setter/getter personalizzati al posto di quelli sintetizzati di default. Forse ogni volta che modifichi una proprietà, vuoi anche memorizzarla su NSUserDefaults. Quindi, si potrebbe avere qualche codice come questo:
@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
Nota: Questo è solo il codice illustrativo, ci potrebbero essere mille cose che non va!
Quindi, nel codice, se si dispone di una riga che dice _autoLoginOn = YES
- si sa che non verrà salvato in NSUserDefaults, mentre se si utilizza self.autoLoginOn = YES
si sa esattamente cosa sta per accadere.
La differenza tra _autoLoginOn
e self.autoLoginOn
è più che semantica.
fonte
2011-04-22 05:10:27
Grazie per la risposta rapida. Hm ... okay, sono [self.dummyLabel setText: @ "..."] e [_dummyLabel setText: @ "..."] facendo il samething? In tal caso, non vedo alcun grande vantaggio nel ridenominare _dummyLabel in dummyLabel. – Thomas
@Thomas, hai capito. –
Il vantaggio di avere un altro nome per ivar rispetto a quello per la proprietà è che si può facilmente vedere nel codice quando si accede a uno o l'altro. –