Zawsze uważałem, że nie można zadeklarować właściwości obiektu w kategorii. Dopóki mój partner nie zrobił tego w kodzie naszej aplikacji i wydawało się, że działa.Od kiedy można zadeklarować właściwości Objective-C 2.0 w kategorii?
Poszedłem na upominek z SO i Google, aby wytłumaczyć mu, że nie, kategorie Celu-C mogą być używane tylko do dodawania metod, a nie właściwości. Znalazłem takie pytania jak:
- Setting New Property In Category Interface Implementation (spojrzeć na zaakceptowanej odpowiedzi)
- Can I add a property for a method not in my category?
Ale potem znalazłem this link na stronie Apple, który zawiera następujące informacje deklaracji @property:
Deklaracja właściwości zaczyna się od słowa kluczowego @property o wartości . @property może pojawiają się w dowolnym miejscu na liście deklaracji metody znajdującej się na interfejsie klasy . @property może pojawiają się również w deklaracji protokołu lub kategorii. (Podkreślenie dodane)
wiem, że to nie działa:
@interface MyClass()
NSInteger foobar;
- (void) someCategorizedMethod;
@end
Ale to kompiluje:
@interface MyClass()
@property NSInteger foobar;
- (void) someCategorizedMethod;
@end
Moje pytanie jest (a) Jaka jest najlepsza praktyka tutaj? i (b) czy jest to coś, co jest nowością w Objective-C 2.0, i zamiast używać "prawdziwego" iVar, po prostu używa pamięci asocjacyjnej za kulisami, aby to działało?
Aby dodać do tego, jego pierwszy przykład gdzie dodaje iVar jest całkowicie poprawny w llvm przy -Xclang -fobjc-nonfragile-abi2 –
Byłoby, gdyby dodawał ivar. W takim przypadku dodaje on zmienną statyczną, która nie jest zmienną instancji. – bbum
dziękuję za obszerne wyjaśnienie. Będę udostępniać ten link moim partnerom kodującym! – makdad