Frage

Ich bin also neu in OBJC-C und lerne gerade etwas über die Verwendung @property und @synthesize Für Variablen und ich haben mich gefragt, wie ich dann auf die Variable zugreifen sollte. Soll ich durch darauf zugreifen [self var] oder self.var oder was? Dies zeigt meine Frage mit 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";
}
War es hilfreich?

Lösung

Hier gibt es keinen Unterschied:

UILabel * l = [self lbl];  // ==   UILablel *l = self.lbl;
[self setLbl:l];          //  ==   self.lbl = l;

Aber hier in Ihrer Stichprobe gibt es einen Unterschied:

_lbl.text = @"A";  

Das letzte ist nicht gut, weil Sie auf den Ivar zugreifen, der direkt auf Ihre @Property umgeht, was oft nicht sinnvoll ist, wenn Sie ihn als als erledigt haben @property.
In Ihrem Fall ändern Sie eine Eigenschaft in Ihrem Ivar, so dass es keinen Schaden gibt, aber wenn Sie dies tun würden:

_lbl = [[[UILabel alloc] initWithFrame:aRect] autorelease];

Das würde Ihnen ein großes Problem verursachen, da Sie den "Setter" umgehen würden. EIN strong Setter hätte dieses Objekt behalten, aber jetzt wird es von niemandem zurückgehalten, es wird verschwinden und Sie werden einen schlechten Zeiger haben, der Ihre Anwendung zum Absturz bringen kann.

Andere Tipps

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top