Nella tua interfaccia, puoi dichiarare formalmente una variabile di istanza tra le parentesi graffe, o tramite l' @property
esterno delle parentesi graffe, o entrambi. In ogni caso, diventano attributi della classe. La differenza è che se dichiari @property
, puoi implementare using @synthesize
, che codifica automaticamente il tuo getter / setter per te. Il setter del codificatore automatico inizializza i numeri interi e float a zero, per esempio. SE dichiari una variabile di istanza e NON ne specifichi una corrispondente @property
, non puoi usare @synthesize
e devi scrivere il tuo getter / setter.
Puoi sempre sovrascrivere il getter / setter con codifica automatica specificando il tuo. Questo è comunemente fatto con la managedObjectContext
proprietà che viene caricata pigramente. Pertanto, dichiari il tuo managedObjectContext
come proprietà, ma poi scrivi anche un -(NSManagedObjectContext *)managedObjectContext
metodo. Ricorda che un metodo, che ha lo stesso nome di una variabile / proprietà di istanza, è il metodo "getter".
Il @property
metodo di dichiarazione consente anche altre opzioni, come retain
e readonly
, che il metodo di dichiarazione della variabile di istanza non offre. Fondamentalmente, ivar
è il vecchio modo e lo @property
estende e lo rende più elaborato / più facile. Puoi fare riferimento a entrambi usando il sé. prefisso o no, non importa fintanto che il nome è univoco per quella classe. Altrimenti, se la tua superclasse ha lo stesso nome di una proprietà come te, allora devi dire come self.name o super.name per specificare di quale nome stai parlando.
Quindi, vedrai sempre meno persone dichiarare ivar
s tra le parentesi graffe, e invece spostarti verso la semplice specificazione @property
e poi il fare @synthesize
. Non puoi fare @synthesize
nella tua implementazione senza un corrispondente @property
. Il sintetizzatore sa solo che tipo di attributo è dalla @property
specifica. L'istruzione synthesize consente anche di rinominare le proprietà, in modo da poter fare riferimento a una proprietà con un nome (abbreviazione) all'interno del codice, ma all'esterno nel file .h utilizzare il nome completo. Tuttavia, con il completamento automatico davvero interessante di XCode ora, questo è un vantaggio minore, ma è ancora lì.
Spero che questo aiuti a chiarire tutta la confusione e la disinformazione che circolano là fuori.