Lo que está viendo es el uso de subrayados para distinguir entre variables de instancia y propiedades. Así que una declaración de clase podría ser:
@interface Foo {
NSString* _label;
....
}
@property (nonatomic, retain) NSString* label; // notice: no underline
Luego, en el archivo de implementación que tendría:
@synthesize label=_label; // the property is matched with the ivar
Ahora, cuando dentro de la aplicación, si desea acceder a la variable de instancia directamente es posible que utilices _label
pero para ir a través de los métodos de acceso a la propiedad (que se encargan de retener/liberar y un montón de otras tareas de contabilidad) se usaría self.label
. Desde el exterior, siempre desearía ir a través de la propiedad {object}.label
.
La otra forma es hacerlo sin el subrayado y el uso justo:
NSString* label;
@property (nonatomic, retain) NSString* label;
...
@synthesize label;
Funciona de la misma, pero entonces se podría confundir a alguien que lee el código y tratando de no perder de vista label
vs self.label
. Personalmente encuentro que la convención de Apple (con subrayados) es un poco más fácil de leer, pero es una cuestión de preferencia.
http://stackoverflow.com/questions/822487/how-does-un-underscore-in-front-of-a-variable-in-a-cocoa-objective-c-class-work – Chuck