In Ihrer Benutzeroberfläche können Sie eine Instanzvariable zwischen den geschweiften Klammern oder über @propertyauß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 @synthesizeIhren 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 @synthesizeund müssen diesen schreiben.
Sie können den automatisch codierten Getter / Setter jederzeit überschreiben, indem Sie Ihren eigenen angeben. Dies geschieht üblicherweise mit der managedObjectContextEigenschaft, die träge geladen wird. Sie deklarieren also Ihre managedObjectContextals Eigenschaft, schreiben dann aber auch eine -(NSManagedObjectContext *)managedObjectContextMethode. Denken Sie daran, dass eine Methode, die denselben Namen wie eine Instanzvariable / -eigenschaft hat, die Methode "getter" ist.
Die @propertyDeklarationsmethode ermöglicht Ihnen auch andere Optionen wie retainund readonly, die die Deklarationsmethode für Instanzvariablen nicht bietet. Grundsätzlich ivarist der alte Weg, und @propertyerweitert 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 ivars zwischen den geschweiften Klammern deklarieren und stattdessen nur noch angeben @propertyund dann tun @synthesize. Sie können @synthesizein Ihrer Implementierung nicht ohne eine entsprechende tun @property. Der Synthesizer weiß nur aus der @propertySpezifikation, 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.