Ho sempre pensato che non si possa dichiarare una proprietà dell'oggetto in una categoria. Fino a quando il mio partner l'ha fatto nel codice della nostra app, e sembrava funzionare.Da quando è possibile dichiarare le proprietà Objective-C 2.0 in una categoria?
Sono andato su un SO e Google abbuffata per cercare di spiegargli che no, le categorie Objective-C possono essere utilizzate solo per aggiungere metodi, non proprietà. Ho trovato a domande quali:
- Setting New Property In Category Interface Implementation (guardare la risposta accettata)
- Can I add a property for a method not in my category?
Ma poi ho trovato this link sul sito di Apple che contiene quanto segue a proposito della dichiarazione @property:
Una dichiarazione di proprietà inizia con la parola chiave @property. @property può apparire ovunque nel metodo elenco dichiarazione trovato nell'interfaccia di una classe. @property può può apparire anche nella dichiarazione di un protocollo o categoria. (Enfasi aggiunta)
So che questo non funziona:
@interface MyClass()
NSInteger foobar;
- (void) someCategorizedMethod;
@end
Ma questo compila:
@interface MyClass()
@property NSInteger foobar;
- (void) someCategorizedMethod;
@end
La mia domanda è (a) qual è la migliore pratica qui? e (b) questo è qualcosa di nuovo in Objective-C 2.0, e invece di usare un iVar "reale", semplicemente utilizza lo storage associativo dietro le quinte per farlo funzionare?
Per aggiungere a questo, il suo primo esempio in cui aggiunge un iVar è perfettamente valido in llvm con -Xclang -fobjc-nonfragile-abi2 –
Lo sarebbe se stesse aggiungendo un ivar. In tal caso, sta aggiungendo una variabile statica che non è una variabile di istanza. – bbum
grazie per l'ampia spiegazione. Condividerò questo collegamento con i miei partner di programmazione !! – makdad