156 votes

Comment fonctionne un trait de soulignement devant une variable dans une classe d’objectif-c cacao ?

J’ai vu dans quelques exemples d’iPhone que les attributs ont utilisé un trait de soulignement _ devant la variable. Est-ce que quelqu'un sait ce que cela signifie ? ou comment ça marche ?

ressemble à un fichier d’interface que j’utilise :

Je ne sais pas exactement ce que fait ce qui précède, mais lorsque je tente de définir le nom de mission comme :

J’obtiens l’erreur : demande de membre « missionName » en quelque chose, pas une structure ou une union

96voto

Kelan Points 1718

Si vous utilisez le préfixe caractère de soulignement pour votre ivars (ce qui n’est rien d’autre qu’une convention commune, mais utile), alors vous devez faire 1 chose supplémentaire afin que l’accesseur généré automatiquement (pour la propriété) sait quel ivar à utiliser. Plus précisément, dans votre fichier de mise en œuvre, votre `` devrait ressembler à ceci :

D’une manière plus générale, il s’agit :

18voto

Marc Charbonneau Points 30464

C’est juste une convention pour une meilleure lisibilité, il ne fait rien de spécial au compilateur. Vous verrez des gens utiliser sur les variables d’instance privée et les noms de méthode. Apple recommande effectivement ne pas utiliser le caractère de soulignement (si vous n’êtes pas en prenant soin vous pouvez substituer quelque chose dans votre superclasse), mais vous ne devrait pas se sentir mal à l’ignorer que les conseils. :)

9voto

Peter DeWeese Points 10185

La seule utilité que j'ai vu, c'est de différencier entre les variables locales et les variables membres comme indiqué ci-dessus, mais il n'est pas nécessaire de la convention. Quand il est associé avec un @de la propriété, il augmente le niveau de verbosité de synthétiser les états – @synthesize missionName = _missionName;, et c'est moche de partout.

Au lieu d'utiliser le trait de soulignement, il suffit d'utiliser descriptif, les noms de variables dans les méthodes qui ne sont pas en conflit. Quand ils doivent conflit, le nom de la variable dans la méthode doit subir un trait de soulignement, pas le membre d'une variable qui peut être utilisé par plusieurs méthodes. La seule commune où cela est utile, dans un setter ou dans une méthode init. En outre, il fera le @synthétiser de déclaration plus concis.

-(void)setMyString:(NSString*)_myString
{
    myString = _myString;
}

Edit: Avec la dernière fonctionnalité de compilateur de l'auto-synthèse, je vais maintenant utiliser soulignement pour le ivar (à l'occasion rare que j'ai besoin d'utiliser un ivar correspondre à ce que l'auto-synthèse.

5voto

smorgan Points 11001

Cela ne signifie pas vraiment n’importe quoi, c’est qu’une convention, que certaines personnes utilisent pour différencier les variables membres de variables locales.

En ce qui concerne l’erreur, il semble qu’aMission a le mauvais type. Ce qu’il sa déclaration ?

2voto

Dipak Narigara Points 911

C’est seulement pour la convention d’affectation de synthétiser les propriétés.

Lorsque vous synthétiser des variables dans le fichier ".m", Xcode fournit automatiquement vous _variable intelligence.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X