objective-c - objective - xcode manual pdf
¿Diferencia entre propiedades y variables en el archivo de cabecera de iOS? (3)
Cuando define una propiedad, se crea un captador y un definidor para usted. Cuando accedes a ellos usando object.member
setters y getters son llamados automáticamente.
Cuando declara una variable en los configuradores de interfaz y los captadores no se escriben para usted. También puede especificar algunos modificadores de visibilidad como @ private, @ public etc.
Posible duplicado:
¿Hay una diferencia entre una "variable de instancia" y una "propiedad" en Objective-c?
¿Diferencia entre self.ivar y ivar?
¿Cuál es la diferencia entre declarar variables entre paréntesis inmediatamente después de la línea @interfaz y definir las propiedades a continuación?
Por ejemplo...
@interface GCTurnBasedMatchHelper : NSObject {
BOOL gameCenterAvailable;
BOOL userAuthenticated;
}
@property (assign, readonly) BOOL gameCenterAvailable;
Definir las variables entre paréntesis simplemente las declara variables de instancia.
Declarar (y sintetizar) una propiedad genera captadores y definidores para la variable de instancia, de acuerdo con los criterios dentro del paréntesis. Esto es particularmente importante en Objective-C porque a menudo es a través de los que obtienen y configuran que la memoria se administra (por ejemplo, cuando se asigna un valor a un ivar, es a través del configurador que el objeto asignado se retiene y se libera en última instancia ). Más allá de una estrategia de administración de memoria, la práctica también promueve la encapsulación y reduce la cantidad de código trivial que de otro modo se requeriría.
Es muy común declarar un ivar entre paréntesis y luego una propiedad asociada (como en su ejemplo), pero eso no es estrictamente necesario. Definir la propiedad y sintetizar es todo lo que se requiere, porque sintetizar la propiedad implícitamente también crea un ivar.
El enfoque actualmente sugerido por Apple (en plantillas) es:
Definir la propiedad en el archivo de cabecera, por ejemplo:
@property (assign, readonly) gameCenter;
Luego sintetiza y declara ivar en la implementación:
@synthesize gameCenter = __gameCenter;
La última línea sintetiza la propiedad gameCenter
y afirma que cualquier valor asignado a la propiedad se almacenará en el __gameCenter
ivar. Nuevamente, esto no es necesario, pero al definir el ivar junto al sintetizador, está reduciendo las ubicaciones donde tiene que escribir el nombre del ivar y al mismo tiempo nombrarlo explícitamente.
{
BOOL gameCenterAvailable;
BOOL userAuthenticated;
}
las dos anteriores se denominan variables miembro. No se puede acceder a ellas fuera de la clase. (Punto importante) (a menos que proporcione captadores y definidores personalizados)
Si @property
una @property
entonces la variable se puede leer dentro de la clase y fuera de la clase ... así que los generadores y los generadores se generan para usted ... automáticamente.
luego no se requiere declarar lo mismo como una variable miembro ..
Se acaba de hacer para aumentar la capacidad de lectura. Puede leerlo fácilmente que leyendo.
@property (non..)