Eine Eigenschaft ist eine benutzerfreundliche Methode zum Implementieren eines Getters / Setters für einen bestimmten Wert mit zusätzlichen nützlichen Funktionen und Syntax. Eine Eigenschaft kann durch eine Instanzvariable gesichert werden, Sie können jedoch auch den Getter / Setter definieren, um etwas Dynamischeres zu tun. Sie können beispielsweise eine LowerCase-Eigenschaft für eine Zeichenfolge definieren, die das Ergebnis dynamisch erstellt, anstatt den Wert eines Elements zurückzugeben Variable.
Hier ist ein Beispiel:
// === In your .h ===
@interface MyObject {
NSString *propertyName;
}
// ...
@property (nonatomic, retain) NSString *propertyName;
// === In your .m @implementation ===
@synthesize propertyName /* = otherVarName */;
Die @propertyZeile definiert eine Eigenschaft namens propertyNametype NSString *. Dies kann mit der folgenden Syntax abgerufen / festgelegt werden:
myObject.propertyName = @"Hello World!";
NSLog("Value: %@", myObject.propertyName);
Wenn Sie zuweisen oder daraus lesen, myObject.propertyNamerufen Sie wirklich Setter / Getter-Methoden für das Objekt auf.
Die @synthesizeZeile weist den Compiler an, diese Getter / Setter für Sie zu generieren, indem die Mitgliedsvariable mit demselben Namen der Eigenschaft zum Speichern des Werts verwendet wird (oder otherVarNamewenn Sie die Syntax in Kommentaren verwenden).
Zusammen mit können @synthesizeSie dennoch einen der Getter / Setter überschreiben, indem Sie Ihren eigenen definieren. Die Namenskonvention für diese Methoden gilt setPropertyName:für den Setter und propertyName(oder getPropertyNamenicht Standard) für den Getter. Der andere wird weiterhin für Sie generiert.
In Ihrer @propertyZeile können Sie eine Reihe von Attributen in Parens für die Eigenschaft definieren, die Dinge wie Thread-Sicherheit und Speicherverwaltung automatisieren können. Standardmäßig ist eine Eigenschaft atomar, was bedeutet, dass der Compiler @synthesizget get / set-Aufrufe mit geeigneten Sperren umschließt, um Parallelitätsprobleme zu vermeiden. Sie können das nonatomicAttribut angeben , um dies zu deaktivieren (z. B. auf dem iPhone, für das Sie die meisten Eigenschaften standardmäßig verwenden möchten nonatomic).
Es gibt 3 Attributwerte, die die Speicherverwaltung für alle @synthesizedSetter steuern . Die erste retainwird automatisch releasean alte Werte der Eigenschaft und retainan die neuen Werte gesendet. Das ist sehr nützlich.
Die zweite copyMöglichkeit besteht darin, eine Kopie aller übergebenen Werte zu erstellen, anstatt sie beizubehalten. Es wird copyempfohlen, NSString zu verwenden, da ein Anrufer einen NSMutableString übergeben und unter Ihnen ändern kann. copyerstellt eine neue Kopie der Eingabe, auf die nur Sie Zugriff haben.
Das dritte ist assigndas Zuweisen eines geraden Zeigers, ohne das alte oder neue Objekt zum Zurückhalten / Freigeben aufzurufen.
Zuletzt können Sie das readonlyAttribut auch verwenden , um den Setter für die Eigenschaft zu deaktivieren.