Objective-C @Property y @Synthesize Best Practice
-
27-10-2019 - |
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";
}
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
Este enlace ayuda mucho para los accesorios de aprendizaje: http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/7295-getters-setters-properties-newbie.html