Objective-C @property und @synthesize Best Practice
-
27-10-2019 - |
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";
}
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
Dieser Link hilft viel für das Lernen von Accessors: http://www.iphonedevsdk.com/forum/iphone-sdk-tutorials/7295-werter-setter-properties-newie.html