En su interfaz, puede declarar formalmente una variable de instancia entre las llaves, o por @propertyfuera 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 @synthesizey 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 managedObjectContextpropiedad que se carga de forma diferida. Por lo tanto, declaras tu managedObjectContextcomo una propiedad, pero luego también escribes un -(NSManagedObjectContext *)managedObjectContextmétodo. Recuerde que un método, que tiene el mismo nombre que una variable de instancia / propiedad es el método "captador".
El @propertymétodo de declaración también le permite otras opciones, como retainy readonly, que el método de declaración de la variable de instancia no tiene. Básicamente, ivares la forma antigua, la @propertyamplí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 ivars entre las llaves y, en su lugar, cambiará a solo especificar @propertyy luego hacer @synthesize. No puede hacer @synthesizeen su implementación sin un correspondiente @property. El sintetizador solo sabe qué tipo de atributo es de la @propertyespecificació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í.