Technique du tiret-bas @property
Kveen
Membre
Bonjour,
J'aimerais avoir des précisions sur une technique que je trouve souvent mais dont je n'ai pas trouvé l'explication dans mes livres...
C'est le tiret-bas qui permet sans doute de respecter un peu plus l'encapsulation, je me trompe ?
Ici avec iOS mais je pense que la technique s'applique un peu partout.
Dans le fichier d'interface :
Dans le fichier d'implémentation :
Merci pour vos éclaircissements.
J'aimerais avoir des précisions sur une technique que je trouve souvent mais dont je n'ai pas trouvé l'explication dans mes livres...
C'est le tiret-bas qui permet sans doute de respecter un peu plus l'encapsulation, je me trompe ?
Ici avec iOS mais je pense que la technique s'applique un peu partout.
Dans le fichier d'interface :
@interface CustomButton : UIButton<br />{<br /> UIView *_inputView; <br />}<br /><br />@property (nonatomic, retain) UIView *inputView;
Dans le fichier d'implémentation :
@implementation CustomButton<br /><br />@synthesize inputView = _inputView;
Merci pour vos éclaircissements.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
C'est juste une convention de nommage pour distinguer les ivars.
En C++, par exemple, on utilise couramment la notation suivante:
Et finalement on n'est plus obligé de déclarer l'ivar dans l'interface, le nouveau runtime le fait automatiquement ?
Est-ce que ce serait très différent de faire inputView = qqchose et self.inputView = qqchose ?
Merci.
tu touveras les reponses seul, je pense
Le comportement des 2 affectations est très différent, dans la mesure ou self.inputView = x appelle en fait le setter setInputView, alors que inputView = x affecte directement la variable...
Si en plus la propriété a l'attribut "retain" alors courcircuiter le setter mènera fort probablement à des fuites mémoires.
Ceci dit, préfixer une variable par un caractère de soulignement, c'est normalement réservé à Apple (d'après les coding guidelines), on n'est pas sensé l'utiliser (même si beaucoup de monde le fait).
Ok merci, je comprends mieux.
Par contre, je suis étonné de voir que dans tous les exemples de code iOS les développeurs prennent la peine de déclarer leurs ivars dans l'interface en plus de @property, c'est une ligne de code en plus pour pas grand chose, nan ?
Ce serait aussi bien comme ça...
Disons que je n'ai connu que iOS 4 en tant que développeur du moins... et on pourrait même dire Xcode 4