In Ihrer Benutzeroberfläche können Sie eine Instanzvariable zwischen den geschweiften Klammern oder über @property
außerhalb der geschweiften Klammern oder über beide formell deklarieren . In jedem Fall werden sie zu Attributen der Klasse. Der Unterschied besteht darin, dass Sie, wenn Sie deklarieren @property
, implementieren können, indem Sie @synthesize
Ihren Getter / Setter automatisch für Sie codieren. Der Auto-Coder-Setter initialisiert beispielsweise Ganzzahlen und schwebt auf Null. Wenn Sie eine Instanzvariable deklarieren und KEINE entsprechende angeben @property
, können Sie keinen eigenen Getter / Setter verwenden @synthesize
und müssen diesen schreiben.
Sie können den automatisch codierten Getter / Setter jederzeit überschreiben, indem Sie Ihren eigenen angeben. Dies geschieht üblicherweise mit der managedObjectContext
Eigenschaft, die träge geladen wird. Sie deklarieren also Ihre managedObjectContext
als Eigenschaft, schreiben dann aber auch eine -(NSManagedObjectContext *)managedObjectContext
Methode. Denken Sie daran, dass eine Methode, die denselben Namen wie eine Instanzvariable / -eigenschaft hat, die Methode "getter" ist.
Die @property
Deklarationsmethode ermöglicht Ihnen auch andere Optionen wie retain
und readonly
, die die Deklarationsmethode für Instanzvariablen nicht bietet. Grundsätzlich ivar
ist der alte Weg, und @property
erweitert ihn und macht es schicker / einfacher. Sie können sich entweder auf das Selbst beziehen. Präfix oder nicht, es spielt keine Rolle, solange der Name für diese Klasse eindeutig ist. Wenn Ihre Oberklasse den gleichen Namen einer Eigenschaft wie Sie hat, müssen Sie entweder self.name oder super.name angeben, um anzugeben, über welchen Namen Sie sprechen.
Auf diese Weise werden immer weniger Personen ivar
s zwischen den geschweiften Klammern deklarieren und stattdessen nur noch angeben @property
und dann tun @synthesize
. Sie können @synthesize
in Ihrer Implementierung nicht ohne eine entsprechende tun @property
. Der Synthesizer weiß nur aus der @property
Spezifikation, um welche Art von Attribut es sich handelt . Mit der Synthesize-Anweisung können Sie auch Eigenschaften umbenennen, sodass Sie innerhalb Ihres Codes auf eine Eigenschaft mit einem Namen (Kurzform) verweisen können, außerhalb der .h-Datei jedoch den vollständigen Namen verwenden. Mit der wirklich coolen Autovervollständigung, die XCode jetzt hat, ist dies jedoch weniger vorteilhaft, aber immer noch vorhanden.
Ich hoffe, dies hilft, all die Verwirrung und Fehlinformationen zu beseitigen, die da draußen herumschwirren.