Objective-C Propiedades con o sin variables de instancia

Posible duplicado:
Propiedades y variables de instancia en Objective-C 2.0

Estoy usando properties solo para ivars que no requieren ninguna validation real al get o establecer un valor para una class que estoy escribiendo.

Ex: @interface ClassB : NSObject { // No ivars } @property (nonatomic, retain) ClassA *obj; @property (nonatomic, retain) NSString *str; 

Siempre que llamo a estos methods dentro de la class siempre estoy usando self.obj / self.str o [self obj] / [self str]. De esta forma, para establecer el estado del object, se ve obligado a recorrer la propiedad para que las references sean gestionadas con más cuidado por los comstackdores y creadores producidos por el comstackdor. Dicho eso, ¿hay algún problema que pueda encontrar para crear mis classs de esta manera? Además, sin presencia de ivar, ¿se necesita alguna "versión" en un método "dealloc" sobrescrito en el file @implementation?

    Si está utilizando la directiva @synthesize para crear los accesores de propiedad, el comstackdor también creará ivars que deje fuera de la statement de class. Todavía necesita liberar sus ivars. Solía ​​ser que no podía acceder directamente a los ivars sintetizados y por lo tanto tenía que usar el configurador de properties en su método -dealloc como este:

     - (void)dealloc { self.obj = nil; self.str = nil; [super dealloc]; } 

    Sin embargo, en estos días, el comstackdor le permitirá acceder directamente al ivar sintetizado, para que pueda lanzarlo en lugar de llamar al setter (que es una buena idea en -dealloc y una mala idea en cualquier otro lugar):

     - (void)dealloc { [obj release]; [str release]; [super dealloc]; } 

    Esto cambiará cuando eventualmente convierta su código para ARC (recuento automático de references) porque el comstackdor se encargará de liberar sus ivars en -dlocloc para usted. La mayoría de las veces, esto significa que su implementación -dealloc puede desaparecer.

    No es necesario que se declaren explícitamente sus IVars. Incluso recomendaría omitirlos porque SIEMPRE debería acceder a IVars a través de los accesores (como señaló lo que ya hace).

    No correrás ningún problema, excepto que el depurador ya no captará los IVars directamente (no se mostrarán bien junto a tu console). Pero eso no es realmente un problema.

    En tu método dealloc ya no necesitarás lanzarlos. Lo que necesitas hacer es nada de ellos.

    self.obj = nil;

    Aquí hay una breve descripción de lo que realmente significan los attributes de la propiedad: (Esto es para mostrarle que se produce una liberación cuando no tiene una variable en el descom)

    asignar

    @property (asignar) nombre NSString *;

     name = newValue; 

    conservar

    @property (retener) NSString * nombre;

     if (name != newValue) { [name release]; name = [newValue retain]; } 

    dupdo

    @property (copyr) NSString * nombre;

     if (name != newValue) { [name release]; name = [newValue copy]; } 

    El comstackdor está automáticamente creando el ivar para usted, aunque no está definido explícitamente en la list ivar. Tiene el mismo nombre que en la list de properties. El comstackdor ahora no requiere la línea de definición duplicada.

    Si tiene properties (ivars) que necesitan ser lanzadas, hágalo.