¿Cuál es la diferencia entre @property y @synthesize?
-
03-07-2019 - |
Pregunta
Como entiendo, @synthesize en realidad está generando los Getters y Setters. Pero, ¿qué está haciendo entonces @property? ¿Se trata simplemente de configurar los parámetros para esa genial función mágica @synthesize?
Solución
Escribes @property en el archivo de cabecera
@property float value;
es equivalente a:
- (float)value;
- (void)setValue:(float)newValue;
Obtenga información para OTRAS clases, que su clase tiene estos métodos
@synthesize phisicaly CREAR estos métodos en la implementación de clase
Otros consejos
@property
declara el nombre como una propiedad. Esto significa que será accesible a través de la sintaxis de puntos ( object.value
).
@synthetize
puede verse como una macro, que crea los métodos get y set. Es útil saber que puede anular esos métodos, incluso si escribe tiene @synthetize
en su lugar.
@property
declara getter y / o setter
@synthesize
los implementa.
Existe un error común de que la directiva @synthesize es necesaria para implementar los creadores y captadores creados con la directiva @property, pero este no es el caso. El uso de la directiva @property sin @synthesize seguirá generando setters / getters y le permitirá usar la notación de puntos. Sin embargo, si se omite la directiva @synthesize, el compilador generará las variables de instancia correspondientes con un carácter de subrayado inicial, por ejemplo. la propiedad myVar tendrá una variable de instancia de _myVar.
El uso de un guión bajo es una convención común que le permite diferenciar entre propiedades y variables de instancia. También es común que las propiedades y las variables de instancia compartan el mismo nombre, que es lo que hace @synthesize de forma predeterminada.