Objective-C @Property e @syntesize Best Practice
-
27-10-2019 - |
Domanda
Quindi sono nuovo di OBJC-C e sto solo imparando a usare @property
e @synthesize
Per le variabili e mi chiedevo come avrei dovuto accedere alla variabile. Dovrei accedervi [self var]
o self.var
o cosa? Questo dimostra la mia domanda con il codice:
@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";
}
Soluzione
Non c'è differenza qui:
UILabel * l = [self lbl]; // == UILablel *l = self.lbl;
[self setLbl:l]; // == self.lbl = l;
Ma c'è una differenza qui nel tuo campione:
_lbl.text = @"A";
Quest'ultimo non è buono perché stai accedendo all'IVAR bypassando direttamente la tua @property, che spesso non ha senso farlo se lo hai dichiarato come @property
.
Nel tuo caso stai cambiando una proprietà sul tuo Ivar, quindi non c'è male, ma se lo faresti:
_lbl = [[[UILabel alloc] initWithFrame:aRect] autorelease];
Ciò ti causerebbe un grosso problema, perché avresti bypass il "setter". UN strong
Setter avrebbe mantenuto quell'oggetto, ma ora non è trattenuto da nessuno, andrà via e avrai un brutto puntatore, che può far crollare la tua applicazione.
Altri suggerimenti
Questo link aiuta molto per l'apprendimento degli accessori: http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/7295-getters-setters-properties-newbie.html