En su interfaz, puede declarar formalmente una variable de instancia entre llaves, o mediante @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 usando @synthesize
, que autocodifica su getter/setter por usted. El colocador de autocodificador inicializa enteros y flotantes a cero, por ejemplo. SI declara una variable de instancia, y NO especifica un @property
correspondiente, entonces no puede usar @synthesize
y debe escribir su propio getter/setter.
Siempre puede anular el eliminador/ajustador autocodificado especificando el suyo. Esto se hace comúnmente con la propiedad managedObjectContext
, que está cargada con holgura. Por lo tanto, declara su managedObjectContext
como una propiedad, pero también escribe un método -(NSManagedObjectContext *)managedObjectContext
. Recuerde que un método, que tiene el mismo nombre que una variable/propiedad de instancia, es el método "getter".
El método de declaración @property
también le permite otras opciones, como retain
y readonly
, que no es el método de declaración de variable de instancia. Básicamente, ivar
es la forma antigua, y @property
lo extiende y lo hace más elegante/más fácil. Puede referirse a usar el yo. prefijo, o no, no importa, siempre y cuando el nombre sea exclusivo de esa clase. De lo contrario, si su superclase tiene el mismo nombre de una propiedad que usted, entonces tiene que decir ya sea como self.name o super.name para especificar de qué nombre está hablando.
Por lo tanto, se verá cada vez menos personas declaran ivar
s entre las llaves, y en lugar de cambiar hacia especificando sólo @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 especificación @property
.La declaración de sintetizar también le permite cambiar el nombre de las propiedades, de modo que puede referirse a una propiedad por un nombre (taquigrafía) dentro de su código, pero afuera en el archivo .h use el nombre completo. Sin embargo, con la autocompleta realmente genial que XCode tiene ahora, esta es una ventaja menor, pero aún está ahí.
Espero que esto ayude a aclarar toda la confusión y desinformación que está flotando por ahí.
¿Por qué es el segundo 'MyObject.h' en negrita no 'MyObject.m'? –