Nella tua interfaccia, puoi dichiarare formalmente una variabile di istanza tra le parentesi graffe, o tramite l' @propertyesterno 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 @synthesizee devi scrivere il tuo getter / setter.
Puoi sempre sovrascrivere il getter / setter con codifica automatica specificando il tuo. Questo è comunemente fatto con la managedObjectContextproprietà che viene caricata pigramente. Pertanto, dichiari il tuo managedObjectContextcome proprietà, ma poi scrivi anche un -(NSManagedObjectContext *)managedObjectContextmetodo. Ricorda che un metodo, che ha lo stesso nome di una variabile / proprietà di istanza, è il metodo "getter".
Il @propertymetodo di dichiarazione consente anche altre opzioni, come retaine readonly, che il metodo di dichiarazione della variabile di istanza non offre. Fondamentalmente, ivarè il vecchio modo e lo @propertyestende 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 ivars tra le parentesi graffe, e invece spostarti verso la semplice specificazione @propertye poi il fare @synthesize. Non puoi fare @synthesizenella tua implementazione senza un corrispondente @property. Il sintetizzatore sa solo che tipo di attributo è dalla @propertyspecifica. 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.