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";
}
È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top