Il vantaggio di dichiarare ivars nella sezione @implementation
è l'incapsulamento migliore. In questo modo, ivar non deve apparire nel file .h
e quindi non è visibile agli utenti esterni della classe che riescono a vedere solo il file di intestazione. Questo nasconde meglio l'implementazione interna della classe.
In generale, ora che le proprietà possono avere ivars auto-sintetizzato e altri Ivars possono essere dichiarate direttamente nel blocco @implementation
, non vedo alcuna ragione per cui si dovrebbe dichiarare un Ivars a tutti nella vostra @interface
(a parte la compatibilità all'indietro).
Perché dichiarare questo NSString in un ambito?
Perché questo è l'unico modo per dichiarare una variabile di istanza. Altrimenti dichiareresti una variabile a cui si potrebbe accedere da qualsiasi punto dello stesso file (vedi la domanda BoltClock collegata al suo commento).
fonte
2011-10-30 19:35:32
Quindi, se dichiaro che NSString non rientra nell'ambito, diventerebbe una variabile globale? Voglio dire che qualsiasi classe esterna potrebbe accedere alla variabile? –
Sort of; vedi la domanda che alcuni pensavano fosse un complice poiché copre la differenza tra ivar e globali/statici. Nota che le dichiarazioni di ivar in '@ implementation' sono relativamente nuove - non è stato possibile nel runtime di Mac OS X a 32 bit a causa del modo in cui il compilatore ha generato le classi. Una volta risolto il problema della "fragile classe di base", è stato possibile eseguire l'auto-sintesi e/o dichiarare ivars al di fuori dell'interfaccia '@ primaria '. – bbum