/ / Jakie jest znaczenie przedrostka „_” w parametrach w Objective-C [duplicate] - ios, goal-c

Jakie jest znaczenie przedrostka "_" w parametrach w Objective-C [duplicate] - ios, objective-c

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 № 1

Kiedy 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.