Pregunta

Así que soy nuevo en OBJC-C y ahora estoy aprendiendo a usar @property y @synthesize para variables y me preguntaba cómo debería acceder a la variable. ¿Debo acceder a él? [self var] o self.var ¿o que? Esto demuestra mi pregunta con el código:

@property (nonatomic, strong) UILabel *lbl;
...
@synthesize lbl = _lbl;

-(void) doStuff
{
   // How should I acces label?
   _lbl.text = @"A";
   [self lbl].text = @"B";
   self.lbl.text = @"C";
}
¿Fue útil?

Solución

No hay diferencia aquí:

UILabel * l = [self lbl];  // ==   UILablel *l = self.lbl;
[self setLbl:l];          //  ==   self.lbl = l;

Pero hay una diferencia aquí en su muestra:

_lbl.text = @"A";  

Ese último no es bueno porque está accediendo al Ivar sin pasar por alto su @property, que a menudo no tiene sentido si lo ha declarado como @property.
En su caso, está cambiando una propiedad en su Ivar, por lo que no hay daño, pero si lo hace:

_lbl = [[[UILabel alloc] initWithFrame:aRect] autorelease];

Eso te causaría un gran problema, porque habrías omitido al "setter". A strong Setter habría conservado ese objeto, pero ahora no se retiene por nadie, desaparecerá y tendrá un mal puntero, que puede hacer que su aplicación se bloquee.

Otros consejos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top