3 Stimmen

sollte ich eine =_variable einer UIIButton oder UILabel Eigenschaft zuweisen?

Hallo, eine Anfängerfrage hier.

während meines Studiums wurde ich immer wieder angewiesen, bei der @synthetisierung einer @Eigenschaft eine Variable =_propertyName anzugeben

so zum Beispiel für

@property (nonatomic, strong) NSTimer *myTimer;

Ich würde tun

@synthesize myTimer = _myTimer;

Meine Frage ist nun, ob dies auch für IB-Eigenschaften geschehen muss? wie zum Beispiel

@property (nonatomic, strong) IBOutlet UILabel *myLabel;
@property (nonatomic, strong) IBOutlet UIButton *myButton;

mache ich gerade hier:

@synthesize myLabel;
@synthesize myButton;

oder:

@synthesize myLabel=  _myLabel;
@synthesize myButton = _myButton;

Jetzt kann ich sehen, warum dies für etwas wie ein NSArray, oder NSString oder BOOL nützlich ist, wo Sie tatsächlich einige Werte speichern, aber ich bin nicht sicher, wie/ob diese Logik gilt für UIButtons, UILabels und ähnliche. Vielen Dank für alle Hinweise (keine Put beabsichtigt)

2voto

john Punkte 2993

Es ist eine Frage der Vorliebe. Es gibt jedoch einen Unterschied, den Sie beachten sollten, und zwar den Umfang. Wenn Sie Ihren Synthesizer zum Beispiel so schreiben,

@synthesize myTime = _myTime;

Und Sie befinden sich z. B. innerhalb des Geltungsbereichs einer Instanzmethode der Klasse, -(void)setTime:(id)myTime; gibt es einen Unterschied zwischen einem Anruf,

self.myTime = newTime;

Und,

myTime = newTime;

Es wird deutlich, dass die erste die Instanzvariable Ihres Objekts ändert, und dass die zweite die myTime lokale Variable, die als Argument an die Methode übergeben wird setTime: Das ist etwas, was man normalerweise nicht tun möchte. Wenn Sie jedoch Ihre Instanzvariable wie folgt synthetisiert haben,

@syntehsize myTime;

Es ist etwas verwirrend, was bei dieser Aufgabe passieren würde,

myTime = newTime;

Dadurch wird die lokale Variable tatsächlich neu zugewiesen, was möglicherweise nicht Ihren Vorstellungen entspricht. Bei der Benennung Ihrer Variablen sollten Sie sich also an Konventionen halten und versuchen, Verwechslungen zu vermeiden. Deshalb ist es meine persönliche Vorliebe, den Unterstrich zuzuweisen und Instanzvariablen immer zu setzen, indem man sie als Anhang von self .

1voto

Das ist nur eine Frage der Konventionen. Versuchen Sie, sich an eine Konvention zu halten. Das gilt nicht nur für Variablennamen, sondern für alles, was Sie programmieren.

0voto

justin Punkte 103032

während meines Studiums wurde ich immer wieder angewiesen, bei der @synthetisierung einer @Eigenschaft eine Variable =_propertyName anzugeben

Das ist eine Frage der Vorliebe. Manche Leute bevorzugen @synthesize myTimer; manche Menschen haben andere Vorlieben

Meine Frage ist nun, ob dies auch für IB-Eigenschaften geschehen muss.

Sie müssen die Methoden in irgendeiner Form zusammenfassen oder definieren. Wählen Sie darüber hinaus einfach eine Konvention und bleiben Sie dabei!

0voto

Lewen Punkte 1823

Meiner Meinung nach dient das "_var" der besseren Unterscheidung zwischen einem Getter/Setter und der zugehörigen Variable selbst.

wenn

@Synthesize myTimer = _myTimer;

verwendet wird. Sie werden jedes Mal daran erinnert, ob Sie den Setter/Getter verwenden oder direkt auf die Variable zugreifen.

Wenn z. B. @Synthesize verwendet wird, dann

self.myTimer = anotherTimer;

ist dasselbe wie

[self setMyTimer(anotherTimer)];

Inzwischen

_myTimer = anotherTimer;

ist lediglich die Zuweisung der Variablen;

ja, es ist eine Frage der Konvention, aber wenn Sie zwischen dem Aufruf eines Setters/Getters und dem direkten Zugriff auf die Variable unterscheiden wollen, sollte "_var" verwendet werden. wenn nicht, spielt es eigentlich keine Rolle.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X