Eiko und andere gaben richtige Antworten.
Hier ist ein einfacher Weg: Greifen Sie direkt auf die private Mitgliedsvariable zu.
Beispiel
In der Header-H-Datei:
@property (strong, nonatomic, readonly) NSString* foo;
In der Implementierungsdatei .m:
// inside one of my init methods
self->_foo = @"someString"; // Notice the underscore prefix of var name.
Das ist es, das ist alles was du brauchst. Kein Muss, keine Aufregung.
Einzelheiten
Ab Xcode 4.4 und LLVM Compiler 4.0 ( Neue Funktionen in Xcode 4.4 ) müssen Sie sich nicht mit den in den anderen Antworten beschriebenen Aufgaben herumschlagen:
- Das
synthesize
Schlüsselwort
- Eine Variable deklarieren
- Deklarieren Sie die Eigenschaft in der .m-Datei der Implementierung erneut.
Nach dem Deklarieren einer Eigenschaft foo
können Sie davon ausgehen, dass Xcode eine private Mitgliedsvariable mit dem Präfix Unterstrich hinzugefügt hat:_foo
.
Wenn die Eigenschaft deklariert wurde readwrite
, generiert Xcode eine Getter-Methode mit dem Namen foo
und einen Setter mit dem Namen setFoo
. Diese Methoden werden implizit aufgerufen, wenn Sie die Punktnotation (my Object.myMethod) verwenden. Wenn die Eigenschaft deklariert wurde readonly
, wird kein Setter generiert. Das bedeutet, dass die mit dem Unterstrich benannte Hintergrundvariable selbst nicht schreibgeschützt ist. Dies readonly
bedeutet einfach, dass keine Setter-Methode synthetisiert wurde und daher die Verwendung der Punktnotation zum Setzen eines Werts mit einem Compilerfehler fehlschlägt. Die Punktnotation schlägt fehl, weil der Compiler Sie daran hindert, eine nicht vorhandene Methode (den Setter) aufzurufen.
Der einfachste Weg, dies zu umgehen, besteht darin, direkt auf die Mitgliedsvariable zuzugreifen, die mit dem Unterstrich benannt ist. Sie können dies auch tun, ohne diese Variable mit dem Unterstrich zu deklarieren! Xcode fügt diese Deklaration als Teil des Build / Compile-Prozesses ein, sodass Ihr kompilierter Code tatsächlich die Variablendeklaration enthält. Diese Deklaration wird jedoch nie in Ihrer ursprünglichen Quellcodedatei angezeigt. Keine Magie, nur syntaktischer Zucker .
Mit self->
ist eine Möglichkeit, auf eine Mitgliedsvariable des Objekts / der Instanz zuzugreifen. Möglicherweise können Sie dies weglassen und einfach den Variablennamen verwenden. Ich bevorzuge jedoch die Verwendung des Pfeils self +, da sich mein Code dadurch selbst dokumentiert. Wenn Sie das sehen self->_foo
, wissen Sie ohne Mehrdeutigkeit, dass dies _foo
eine Mitgliedsvariable in dieser Instanz ist.
Durch die Art und Weise, die Diskussion über Vor- und Nachteile der Eigenschaftenaccessoren gegen direkten Ivar Zugang ist genau die Art von nachdenklicher Behandlung , die Sie in Dr. lesen werden Matt Neuberg ‚s Programming iOS Buch. Ich fand es sehr hilfreich zu lesen und erneut zu lesen.