Niedawno próbowałem skompilować starszy projekt Xcode (który wcześniej kompilował się dobrze), a teraz widzę wiele błędów tego formularza:
error: writable atomic property 'someProperty' cannot pair a synthesized setter/getter with a user defined setter/getter
Wzorzec kodu, który powoduje te błędy, zawsze wygląda następująco:
// Interface:
@property (retain) NSObject * someProperty;
// Implementation:
@synthesize someProperty; // to provide the getter
- (void)setSomeProperty:(NSObject *)newValue
{
//..
}
Rozumiem, dlaczego generowany jest błąd. Mówię kompilatorowi, aby zsyntetyzował moje metody dostępu do właściwości (zarówno pobierające, jak i ustawiające), a następnie natychmiast zastępuję metodę ustawiającą ręcznie. Ten kod zawsze trochę nieprzyjemnie pachniał.
Więc jaki jest właściwy sposób, aby to zrobić? Jeśli użyję @dynamic
zamiast @synthesize
, będę musiał również napisać getter. Czy to jedyny sposób?
atomic
nieruchomości? W przypadku właściwości atomowych dobrym pomysłem może być utrzymanie synchronizacji pary getter / setter w odniesieniu do strategii blokowania. Jest to trudne, jeśli jedna część jest syntetyzowana, a druga jest kodem niestandardowym.