Gram na iOS od kilku miesięcy,zawsze używaj @synthesize do „ustawiania i pobierania” @property. Ale w niektórych tutorialach często widzę @synthesize param = _param, nie całkiem rozumiem.
For example: in .h file
@property (nonatomic, retain) NSString *param1;
@property (nonatomic, retain) NSString *param2;
in .m file
@synthesize param1; //this is what I like to do
@synthesize param2 = _param2; // this is what "experienced" programmer does
Z mojego przyzwyczajenia mogę korzystać z self.param1 lub po prostu param1, aby uzyskać to wystąpienie, czy jest jakaś różnica przy okazji?
Z innych wydają się używać _param2 zamiast innego podejścia. Wiem, że ma to coś wspólnego z getter / seter, ale wciąż nie jestem całkiem pewien.
Czy ktoś mógłby wyjaśnić ich różnicę i zalety / wady?
Wielkie dzięki.
Odpowiedzi:
7 dla odpowiedzi № 1Kiedy używasz
@synthesize param2 = _param2;
oznacza, że używasz innej nazwy, aby uzyskać bezpośredni dostęp do zmiennej instancji.
(W nowych wersjach XCode, jeśli sam nie określisz syntezatora, XCode zapisuje jeden dla ciebie, taki sam jak ten)
Jeśli użyjesz:
_param2
Uzyskujesz bezpośredni dostęp do zmiennej instancji.
Jeśli użyjesz:
self.param2
Uzyskujesz dostęp do zmiennej przez narzędzie ustawiające / pobierające, a te ustawiające / pobierające są definiowane za pomocą ustawionych właściwości.
Zasadniczo chcesz uzyskać dostęp do ivar bezpośrednio w metodach init, a w pozostałej części klasy używasz self.
Jeśli chcesz uzyskać więcej informacji na ten temat, po prostu kliknij ten link:
Hermetyzowanie danych w celu C
2 dla odpowiedzi nr 2
@synthesize param2 = _param2;
Używa innej nazwy dla podstawowej zmiennej instancji. Zaletą jest to, że przez pomyłkę nie uzyskujesz dostępu do ivar.
Obecnie otrzymujesz syntezę automatycznie i używa ona drugiego wariantu, więc po prostu pomiń @synthsize
wszystko razem i użyj self.param
i _param
.