Por que colocar sublinhado “_” antes dos nomes das variables ​​no Objetivo C

Duplicar Possível:
Como um sublinhado na frente de uma variável em uma class de cacau objective-c funciona?

No IC objective, estou vendo muito código com um sublinhado antes dos nomes das variables, por exemplo, _someVariable

por que é que? também como você escreve acessadores ou seja, obter e definir o método para tal variável.

Os sublinhados são freqüentemente usados ​​para mostrar que as variables ​​são variables ​​de instância . Não é realmente necessário, pois os ivars podem ter o mesmo nome de suas propriedades e seus accessres.

Exemplo:

@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 

Agora, em vez de declarar e codificar os acessadores myIVar e setMyIVar: você mesmo, você pode deixar o compilador fazer isso. Em versões mais recentes, você não precisa nem declarar myIVar na interface. Você apenas declara a propriedade e deixa o compilador sintetizar o resto para você. No arquivo .m , você faz:

 @implementation MyClass @synthesize myIVar; // generates methods myIVar and setMyIVar: for you, // with proper code. // also generates the instance variable myIVar // etc... @end 

Certifique-se de finalizar a string:

 - (void) dealloc { [myIVar release]; [super dealloc]; } 

FWIW, se você quiser fazer mais do que a implementação padrão do getter ou do setter, você ainda pode codificar um ou ambos, mas também terá que cuidar do gerenciamento de memory. Nesse caso, o compilador não irá mais gerar aquele accessr em particular (mas se apenas um for feito manualmente, o outro ainda será gerado).

Você acessa as propriedades como

 myString = self.myIVar; 

ou, de outra class:

 theString = otherClass.myIVar; 

e

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

No MyClass, se você se omitir self. , você pega o nu ivar . Geralmente, isso deve ser usado somente nos inicializadores e no dealloc.

Não faça isso.

Os únicos sublinhados principais são uma convenção de codificação interna da Apple. Eles fazem isso para que seus nomes ivar não colidam com os seus. Se você quiser usar um prefixo em seus nomes ivar, use qualquer coisa, exceto um único sublinhado.

esta é uma convenção de nomenclatura normalmente usada para c ++ para definir variables ​​de instância que são particulares

como em uma class u pode ter

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

esta é uma convenção de nomenclatura, fui obrigado a usar em c + +. No entanto, meu professor nunca nos disse o nome da convenção de nomenclatura. Mas eu sinto que isso é útil e legível especialmente quando você não está usando convenções de nomenclatura java.