Zaletą posiadania inną nazwę dla ivar niż dla nieruchomości jest które można łatwo zobaczyć w kodzie jeśli dostęp do jednego lub inne - Andre K
I "nie mogę znaleźć przycisku" komentarz ", więc muszę opublikować jako" odpowiedź ".
Po prostu chciałem rozwinąć komentarz Andre - wiedząc, kiedy używasz syntetyzowanych właściwości vs zmienną waniliową, wiesz (szczególnie w przypadku ustawiaczy), kiedy zmienna jest zatrzymywana/kopiowana/wydana automatycznie dzięki twojemu ładnemu seter, a będąc manipulowanym ręcznie.
Oczywiście, jeśli robisz coś dobrze, prawdopodobnie nie potrzebujesz pomocy osoby ustawiającej, aby prawidłowo zachować/uwolnić obiekty! Ale mogą istnieć inne scenariusze, w których odniesienie do twoich ivars jako self.ivar
zamiast _ivar
może być pomocne, na przykład gdy używasz niestandardowych ustawiaczy/pobierających zamiast domyślnych syntezatorów. Być może za każdym razem, gdy modyfikujesz właściwość, chcesz ją również przechowywać w NSUserDefaults. Więc może masz trochę kodu:
@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
Uwaga: To jest tylko kod przykładowy, nie może być tysiąc rzeczy źle z nim!
Teraz, w twoim kodzie, jeśli masz linię, która mówi: _autoLoginOn = YES
- wiesz, że nie zostanie zapisana w NSUserDefaults, natomiast jeśli używasz self.autoLoginOn = YES
, wiesz dokładnie, co się stanie.
Różnica między _autoLoginOn
a self.autoLoginOn
jest czymś więcej niż semantycznym.
Dzięki za szybką odpowiedź. Hm ... okej, czy [self.dummyLabel setText: @ "..."] i [_dummyLabel setText: @ "..."] robią sametowanie? Jeśli tak, nie widzę żadnej dużej korzyści z przemianowania _dummyLabel na dummyLabel. – Thomas
@ Thomas, masz to. –
Zaletą posiadania innej nazwy dla ivar niż dla właściwości jest to, że możesz łatwo zobaczyć w kodzie, gdy uzyskujesz dostęp do jednego lub drugiego. –