Hat @synthesize etwas = _something;auch die Variable _something automatisch erstellen?
-
13-12-2019 - |
Frage
Ich verstehe, dass @synthesize die Getter und Setter für eine Instanzvariable automatisch erstellt.Wenn ich den Teil = _something spezifiziere, verstehe ich, dass dies den Compiler/die Laufzeit darüber informiert, dass er eine bestimmte Unterstützungsvariable für die Getter/Setter verwenden soll.
Erstellt Objective-C automatisch die Variable „_something“ zusammen mit meinen Gettern/Settern oder sollte ich diese Instanzvariable in meiner Schnittstellen-/Implementierungsdatei definieren?
Lösung
Die Frage ist, ob @property in der Header-Datei und @synthesize in der Implementierung den zugrunde liegenden Ivar erstellen oder ob der Ivar in der Header-Datei aufgeführt werden muss.Beispiel in der Header-Datei:
@interface SomeClass : NSObject {
NSString *_someString; // Is this needed???
}
@property NSString *someString;
und in der Umsetzung:
@synthesize someString = _someString;
Die Antwort ist, dass es davon abhängt, ob Sie die alte oder die moderne Laufzeit verwenden.Unter iOS verwenden Sie immer die moderne Laufzeitumgebung, sodass Sie diese nie benötigen NSString *_somestring
Zeile, aber diese Frage bezieht sich auf Mac OS X.Wenn Sie für Mac OS X ein 64-Bit-Programm unter Mac OSDa einige Fehlinformationen veröffentlicht wurden, hier ein Hinweis: Objective-C-Laufzeitprogrammierhandbuch.
Andere Tipps
Es tut uns leid, dass Sie einen Teil Ihrer Frage falsch lesen.Wenn Sie den @synthesize-Teil mit dem Unterstrich tun, sind Sie alle gut.Keine Notwendigkeit, ein IVAR explizit zu definieren.