La ventaja de tener otro nombre para el Ivar que para la propiedad es que se puede ver fácilmente en el código cuando se está accediendo a una u otro - Andre K
I No puedo encontrar un botón de "comentario", así que tengo que publicar como una "respuesta".
Solo quería ampliar el comentario de Andre: saber cuándo está usando las propiedades sintetizadas frente a la variable de vanilla, sabe (especialmente en el caso de los ajustadores) cuando una variable se conserva/copia/libera automáticamente gracias a su agradable setter, vs manipulado a mano.
Por supuesto, si estás haciendo las cosas bien, ¡probablemente no necesites la ayuda de un colocador para retener/soltar objetos correctamente! Pero también puede haber otros escenarios donde hacer referencia a sus ivars como self.ivar
en lugar de _ivar
puede ser útil, como cuando está utilizando arregladores/captadores personalizados en lugar de los sintetizados por defecto. Quizás cada vez que modifique una propiedad, también desee almacenarla en NSUserDefaults. Así que es posible que tenga algo de código como esto:
@interface SOUserSettings : NSObject {
BOOL _autoLoginOn;
}
@property (nonatomic, assign) BOOL autoLoginOn;
@end
@implementation SOUserSettings
@synthesize autoLoginOn = _autoLoginOn;
- (void)setAutoLoginOn:(BOOL)newAutoLoginOnValue {
_autoLoginOn = newAutoLoginOnValue;
[[NSUserDefaults standardUserDefaults] setBool:_autoLoginOn forKey:@"UserPrefAutoLoginOn"];
}
@end
Nota: Esto es sólo ilustrativa de código, podría haber mil cosas mal con él!
Ahora, en su código, si tiene una línea que dice _autoLoginOn = YES
, sabe que no se guardará en NSUserDefaults, mientras que si usa self.autoLoginOn = YES
, sabrá exactamente qué va a pasar.
La diferencia entre _autoLoginOn
y self.autoLoginOn
es más que solo semántica.
Gracias por la respuesta rápida. Hm ... está bien, son [self.dummyLabel setText: @ "..."] y [_dummyLabel setText: @ "..."] haciendo lo mismo? Si es así, no veo ninguna gran ventaja de cambiar el nombre de _dummyLabel a dummyLabel. – Thomas
@Thomas, lo tienes. –
La ventaja de tener otro nombre para el ivar que para la propiedad es que puedes ver fácilmente en el código cuando estás accediendo a uno u otro. –