¿Por qué poner subrayado “_” antes de nombres de variables en Objective C

Posible duplicado:
¿Cómo funciona un guión bajo al frente de una variable en una clase de cocoa objective-c?

En el CI objective, veo un montón de código con un guión bajo antes de los nombres de las variables, por ejemplo _someVariable

¿porqué es eso? también cómo escribir accesos, es decir, obtener y establecer el método para dicha variable.

Los guiones bajos se utilizan a menudo para mostrar que las variables son variables de instancia . No es realmente necesario, ya que los ivars pueden 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 codificar los myIVar y setMyIVar: usted mismo, puede dejar que el comstackdor haga eso. En versiones más nuevas, ni siquiera tiene que declarar myIVar en la interfaz. Usted declara la propiedad y deja que el comstackdor sintetice el rest para usted. En el archivo .m , haces:

 @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 de getter o setter do, aún puedes codificar uno o ambos, pero también tendrás que ocuparte de la administración de la memoria. En ese caso, el comstackdor ya no generará ese acceso particular (pero si solo uno se hace manualmente, el otro aún se generará).

Usted accede a las propiedades como

 myString = self.myIVar; 

o, de otra clase:

 theString = otherClass.myIVar; 

y

 otherClass.myIVar = @"Hello, world!"; 

En MyClass, si omites self. , obtienes el ivar desnudo Esto generalmente solo debe usarse en los inicializadores y en dealloc.

No lo hagas

Los guiones bajos únicos son una convención de encoding interna de Apple. Lo hacen para que sus nombres no choquen con los tuyos. Si desea usar un prefijo en sus nombres de ivar, use cualquier cosa que no sea un solo guión bajo.

esta es una convención de nomenclatura utilizada normalmente para c ++ para definir variables de instancia que son privadas

como en una clase u puede tener

 private: int __x; public: int GetX() { return this.__x; } 

esta es una convención de nombres, me vi obligado a usar en c ++. Sin embargo, mi maestro nunca nos dijo el nombre de la convención de nombres. Pero creo que esto es útil y legible especialmente cuando no estás usando las convenciones de nomenclatura de Java.