Duplicata possible:
Comment fonctionne un trait de soulignement devant une variable dans une classe d'objectif c de cacao?J'ai vu cela chez Apple, dans UIPickerView.h:
id<UIPickerViewDataSource> _dataSource;
pourquoi cela souligne-t-il? A-t-il une signification particulière? Une convention que je dois connaître?
Réponses
Trop de publicités?Ce que vous voyez est l'utilisation de souligne de distinguer entre les variables d'instance et les propriétés. Ainsi, une déclaration de classe pourrait être:
@interface Foo {
NSString* _label;
....
}
@property (nonatomic, retain) NSString* label; // notice: no underline
Puis dans le fichier d'implémentation de vous aurait:
@synthesize label=_label; // the property is matched with the ivar
Maintenant, quand à l'intérieur de la mise en œuvre, si vous souhaitez accéder à la variable d'instance directement vous pouvez simplement utiliser _label
mais de passer par la propriété des méthodes accesseurs (qui prennent soin de conserver/releases et un tas d'autres livre de maintien de tâches) vous utiliserez self.label
. De l'extérieur, on aurait toujours envie de passer par l' {object}.label
de la propriété.
L'autre façon est de le faire sans le trait de soulignement et il suffit d'utiliser:
NSString* label;
@property (nonatomic, retain) NSString* label;
...
@synthesize label;
Il fonctionne de la même, mais alors il pourrait confondre quelqu'un qui lit le code et essayer de garder une trace de l' label
vs self.label
. Personnellement, je trouve l'Apple convention (avec souligne) un peu plus facile à lire, mais c'est une question de préférence.
Comme certains l'ont déjà dit, _someVar était utilisé pour dire qu'une variable était privée. C'était une simple question de convention et n'a pas vraiment d'importance.
Une autre utilisation, faire un voyage dans la machine de retour en C a _function () représentait une fonction qui n'était pas portable de la plate-forme et __function () représentait une fonction qui n'était pas portable du compilateur. Ainsi, dans la bibliothèque C standard, vous verrez parfois une variable avec un _ ou __ devant le nom, c'est ce que ces fonctions représentent.
se peut-il que ... (mémoire de jogging) ...
Je me souviens vaguement d'avoir lu un document ADC expliquant que Apple se réserve l'utilisation de variables membres avec préfixe de soulignement? et que les développeurs tiers sont découragés d'utiliser cette convention afin d'éviter les collisions?
| K <