Objective-C @property et @synthesize les meilleures pratiques
-
27-10-2019 - |
Question
Je suis nouveau à objc-C et je suis en train d'apprendre maintenant sur l'utilisation @property
et @synthesize
pour les variables et je me demandais comment je puis accéder à la variable. Dois-je accéder par [self var]
ou self.var
ou quoi? Cela démontre ma question avec le code:
@property (nonatomic, strong) UILabel *lbl;
...
@synthesize lbl = _lbl;
-(void) doStuff
{
// How should I acces label?
_lbl.text = @"A";
[self lbl].text = @"B";
self.lbl.text = @"C";
}
La solution
Il n'y a pas de différence ici:
UILabel * l = [self lbl]; // == UILablel *l = self.lbl;
[self setLbl:l]; // == self.lbl = l;
Mais il y a une différence ici dans l'échantillon:
_lbl.text = @"A";
Ce dernier n'est pas bon parce que vous accédez au iVar directement sans passer par votre @property, qui souvent ne font pas de sens à faire si vous avez le déclarer comme @property
.
Dans votre cas, vous changez une propriété sur votre iVar, donc il n'y a pas de mal, mais si vous faites ceci:
_lbl = [[[UILabel alloc] initWithFrame:aRect] autorelease];
qui vous causer un gros problème, parce que vous auriez enjambent le « poseur ». Un poseur de strong
aurait retenir cet objet, mais maintenant il est à retenir par personne, elle disparaîtra et vous aurez un mauvais pointeur, qui peut faire votre plantage de l'application.
Autres conseils
This link helps a lot for learning accessors: http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/7295-getters-setters-properties-newbie.html