Objective-C-Eigenschaften in die iPhone-Entwicklung
Was ist der Unterschied zwischen einer Eigenschaft und einer Instanz-Variablen in Objective-C. ich brauche, um zu verstehen, das in OOP-Begriffe. Ist eine Eigenschaft, die Erklärung nur eine convenience-Verpackung (mit @synthetisieren, die in der Umsetzung) für Zugriff auf Instanz-Variablen?
Dank,
codecowboy.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eigenschaften und ivars sind zwei völlig verschiedene Dinge.
Instanz-variable ist eine variable gespeichert, die innerhalb des Objekts, so dass jede Instanz hat Ihre eigenen. Es wird verwiesen auf den der pointer neben relativ zu dem Objekt, Zeiger/selbst (leicht indirected für die moderne Laufzeit, aber funktional äquivalente). ivars sind in der Regel intern für eine Klasse ist, und standardmäßig ist der Zugriff nur durch die Klasse und seine Nachkommen (@protected). Innerhalb von Methoden erhältlich sind Sie noch keine Qualifikation besitzen, ansonsten können Sie (aber selten sind, ad usuaually sollte nicht) Zugriff über Dereferenzierung, z.B. obj->ivar.
Einer Eigenschaft definiert eine getter-und setter (der setter ist optional) Schnittstelle. Das ist alles, es tut. Es gibt zwei öffentliche Methoden:
Diese sind definiert als Methoden, genau so, wie wenn Sie erklärt, dass Sie wie, nicht mehr, nicht weniger. Diese Methoden werden aufgerufen, entweder mit der normalen syntax ([propname obj] und [obj setPropname:n] oder mit der modernen dot-notation (obj.propname oder obj.propname = n). Diese beiden Optionen sind syntaktisch verschiedene nur, Sie Verhalten sich identisch, und Sie können Sie verwenden die Punktnotation, ob die Methoden sind deklariert mit @property oder erklärt Sie manuell wie oben beschrieben.
Müssen Sie dann die Methoden implementieren, die in der Umsetzung, entweder, indem Sie die Methoden selbst, indem Sie mit @synthetisieren, oder durch den Umgang mit dem missing-Methode dynamisch.
Eigenschaften werden unterstützt durch ein ivar (den gleichen Namen oder anders benannt (ist meine Vorliebe um Verwirrung zu vermeiden)) oder Sie dürfen nicht. Sie können speichern Ihren Wert anderswo, oder Sie können es berechnen, von anderen Daten.
Zum Beispiel könnten Sie haben:
und dann umzusetzen - (NSString*) fullname Rückgabe der Verkettung von firstname und lastname.
Ich denke, Sie sind ziemlich viel es. Die @property und @synthetisieren, stellen Sie die accessor-Deklarationen und Umsetzung für die bereits erklärte ivar. Sie haben verschiedene Attribute können Sie festlegen, auf die @ - Eigenschaft zu geben, die Sie Kontrolle darüber, wie es generiert wird, um zu machen, geeignet für die ivar
Haben Sie einen Blick auf "Objective C 2.0 Deklarierten Eigenschaften"
Den Unterschied zwischen Eigenschaft und Instanz ivar ist die variable, die als Eigenschaft, die sichtbar sind in einer anderen Klasse, in der Erwägung, dass für den Zugriff auf die iVar oder Instanz, die Sie brauchen, um das Objekt von dieser Klasse, und dann können Sie zugreifen.
und Mit @synthetisieren compiler generiert die setter und getter für diese Eigenschaft.