¿Cuál es la diferencia en la definición de una variable en la interfaz del archivo .h método () solo sin sintetizarlo?

StackOverflow https://stackoverflow.com/questions/4643692

Pregunta

Me definir una variable en el método de la interfaz del archivo .h como este ...

@interface ......{
  int a;
}

A continuación, lo uso en el archivo .m, que funciona bien ....

También i modificado el código como

@interface ......{
  int a;
}
@property(nonatomic) int a;

en el archivo .h, y en el archivo .m i cambia el valor int como

@synthesize a;

Ahora también funciona bien ...

¿Cuál es la diferencia entre ambos casos?

¿Fue útil?

Solución

Al declarar su 'a' la propiedad que está permitiendo que el int para almacenar en su clase y se puede acceder a él desde dentro de su clase - pero solamente dentro de su clase. Si usted quiere que sea una propiedad que se puede acceder por otros objetos (una propiedad pública), entonces usted necesita métodos getter y setter.

Al declarar como @property en su .h y el uso de @synthesize en su .m, se crea automáticamente dos métodos:

[myObject a]; // your getter
[myObject setA:50]; // your setter

Una cosa a tener en cuenta aquí es que a menudo es una muy buena idea utilizar las propiedades sythesised incluso dentro de su clase, ya que se hará cargo de la gestión de memoria. Por ejemplo, cuando se marca el @property como retain:

objectProperty = anObject; // just accessing locally, no memory management
self.objectProperty = anObject; // [anObject retain] will be called
self.objectProperty = nil; // [anObject release] will be called

Otros consejos

En el primer caso se usa en el campo, con acceso directo a la misma. En segundo caso se está definiendo la propiedad Objective C, con descriptores de acceso.

Si se define y sintetizar una propiedad, entonces también se puede acceder usando el valor int value = self.a; self.a = newValue;. Esto también hace que la variable accesible a otros objetos. Sin la propiedad, no se puede utilizar el self. para llegar a la variable y no hay forma automática para otros objetos para llegar a ella.

Al definir y sintetizar una propiedad le dice compilador para generar tanto Ivar y métodos de acceso (- (int) a; y - (void) seta: (int) a_;) para ello. Esos métodos se pueden llamar de manera explícita o implícitamente el uso de la sintaxis con punto:

self.a = num; // [self setA:num] gets called 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top