En su interfaz, puede declarar formalmente una variable de instancia entre las llaves, o por @property
fuera de las llaves, o ambas. De cualquier manera, se convierten en atributos de la clase. La diferencia es que si declara @property
, puede implementar using @synthesize
, que codifica automáticamente su getter / setter por usted. El configurador del codificador automático inicializa enteros y flota a cero, por ejemplo. SI declara una variable de instancia y NO especifica una correspondiente @property
, entonces no puede usar @synthesize
y debe escribir su propio getter / setter.
Siempre puede anular el getter / setter codificado automáticamente especificando el suyo. Esto se hace comúnmente con la managedObjectContext
propiedad que se carga de forma diferida. Por lo tanto, declaras tu managedObjectContext
como una propiedad, pero luego también escribes un -(NSManagedObjectContext *)managedObjectContext
método. Recuerde que un método, que tiene el mismo nombre que una variable de instancia / propiedad es el método "captador".
El @property
método de declaración también le permite otras opciones, como retain
y readonly
, que el método de declaración de la variable de instancia no tiene. Básicamente, ivar
es la forma antigua, la @property
amplía y la hace más elegante / fácil. Puede referirse a usar el self. prefijo, o no, no importa siempre que el nombre sea exclusivo de esa clase. De lo contrario, si su superclase tiene el mismo nombre de propiedad que usted, entonces debe decir como self.name o super.name para especificar de qué nombre está hablando.
Por lo tanto, verá cada vez menos personas declarando ivar
s entre las llaves y, en su lugar, cambiará a solo especificar @property
y luego hacer @synthesize
. No puede hacer @synthesize
en su implementación sin un correspondiente @property
. El sintetizador solo sabe qué tipo de atributo es de la @property
especificación. La declaración de síntesis también le permite cambiar el nombre de las propiedades, de modo que pueda referirse a una propiedad por un nombre (abreviatura) dentro de su código, pero afuera en el archivo .h use el nombre completo. Sin embargo, con el autocompletado realmente genial que tiene XCode ahora, esto es una ventaja menor, pero sigue ahí.
Espero que esto ayude a aclarar toda la confusión y la desinformación que está flotando por ahí.