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 @property
Zeile definiert eine Eigenschaft namens propertyName
type 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.propertyName
rufen Sie wirklich Setter / Getter-Methoden für das Objekt auf.
Die @synthesize
Zeile 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 otherVarName
wenn Sie die Syntax in Kommentaren verwenden).
Zusammen mit können @synthesize
Sie 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 getPropertyName
nicht Standard) für den Getter. Der andere wird weiterhin für Sie generiert.
In Ihrer @property
Zeile 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 @synthesiz
get get / set-Aufrufe mit geeigneten Sperren umschließt, um Parallelitätsprobleme zu vermeiden. Sie können das nonatomic
Attribut 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 @synthesized
Setter steuern . Die erste retain
wird automatisch release
an alte Werte der Eigenschaft und retain
an die neuen Werte gesendet. Das ist sehr nützlich.
Die zweite copy
Möglichkeit besteht darin, eine Kopie aller übergebenen Werte zu erstellen, anstatt sie beizubehalten. Es wird copy
empfohlen, NSString zu verwenden, da ein Anrufer einen NSMutableString übergeben und unter Ihnen ändern kann. copy
erstellt eine neue Kopie der Eingabe, auf die nur Sie Zugriff haben.
Das dritte ist assign
das Zuweisen eines geraden Zeigers, ohne das alte oder neue Objekt zum Zurückhalten / Freigeben aufzurufen.
Zuletzt können Sie das readonly
Attribut auch verwenden , um den Setter für die Eigenschaft zu deaktivieren.