Los guiones bajos se utilizan a menudo para mostrar que las variables son variables de instancia. No es realmente necesario, ya que ivars puede tener el mismo nombre que sus propiedades y sus accesorios.
Ejemplo:
@interface MyClass : NSObject {
NSString *_myIVar; // can be omitted, see rest of text
}
// accessors, first one is getter, second one is setter
- (NSString *) myIVar; // can be omitted, see rest of text
- (void) setMyIVar: (NSString *) value; // can be omitted, see rest of text
// other methods
@property (nonatomic, copy) NSString *myIVar;
@end
Ahora, en lugar de declarar y la codificación de los descriptores de acceso myIVar
y setMyIVar:
usted mismo, puede dejar que el compilador de hacer eso. En versiones más nuevas, ni siquiera tiene que declarar myIVar
en la interfaz. Usted declara la propiedad y deja que el compilador sintetice el resto para usted. En el archivo .m
, que hace:
@implementation MyClass
@synthesize myIVar; // generates methods myIVar and setMyIVar: for you,
// with proper code.
// also generates the instance variable myIVar
// etc...
@end
Asegúrese de finalizar la cadena:
- (void) dealloc {
[myIVar release];
[super dealloc];
}
Fwiw, si quieres hacer algo más que la implementación predeterminada del getter o setter hacer, se puede todavía codifica uno o ambos, pero también tendrá que encargarse de la administración de la memoria. En ese caso, el compilador ya no generará ese acceso particular (pero si solo uno se hace manualmente, el otro aún se generará).
accede a las propiedades como
myString = self.myIVar;
o, de otra clase:
theString = otherClass.myIVar;
y
otherClass.myIVar = @"Hello, world!";
En MiClase, si se omite self.
, se obtiene el desnudo ivar. Esto generalmente solo debe usarse en los inicializadores y en dealloc.
upvoting porque creo que deberíamos estar familiarizados con todo tipo de convenciones de nomenclatura estándar. – amod