Objective-C-Eigenschaften in der iPhone-Entwicklung

8

Was ist der Unterschied zwischen einer Eigenschaft und einer Instanzvariablen in Objective-C? Ich muss das in OOP-Begriffen verstehen. Ist eine Eigenschaftsdeklaration nur ein Convenience-Wrapper (mit @synthesize in der Implementierung) für den Zugriff auf Instanzvariablen?

Danke,

Codecowboy.

    
codecowboy 08.07.2009, 07:31
quelle

3 Antworten

7

Eigenschaften und Ivars sind zwei völlig verschiedene Dinge.

Und die Instanzvariable ist eine Variable, die im Objekt gespeichert ist, so dass jede Instanz ihre eigene hat. Es wird durch Zeigeraddition relativ zum Objektzeiger / self referenziert (für die moderne Laufzeit leicht abgeleitet, aber funktional äquivalent). Ivars sind normalerweise innerhalb einer Klasse intern und können standardmäßig nur von der Klasse und ihren Nachkommen (@protected) aufgerufen werden. Innerhalb von Methoden sind sie ohne Qualifizierung verfügbar, andernfalls können sie (aber selten sind sie normalerweise nicht) über Indirection aufgerufen werden, zB obj- & gt; ivar.

Eine Eigenschaft definiert eine Getter- und Setter-Schnittstelle (der Setter ist optional). Mehr ist es nicht. Es definiert zwei öffentliche Methoden:

%Vor%

Diese Methoden sind genau so definiert, als ob Sie sie so deklariert hätten, nicht mehr und nicht weniger. Diese Methoden werden entweder mit der normalen Syntax ([obj propname] und [obj setPropname: n] oder mit der modernen Punktnotation (obj.propname oder obj.propname = n) aufgerufen. Diese beiden Optionen sind nur syntaktisch verschieden, sie verhalten sich identisch und Sie können Punktnotation verwenden, unabhängig davon, ob die Methoden mit @property deklariert oder wie oben manuell deklariert wurden.

Sie müssen dann die Methoden in der Implementierung implementieren, indem Sie entweder die Methoden selbst schreiben, @synthesize verwenden oder die fehlende Methode dynamisch bearbeiten.

Eigenschaften können durch einen ivar (der gleich benannt oder anders benannt ist (meine Präferenz zur Vermeidung von Verwechslungen) unterstützt werden oder nicht. Sie können ihren Wert anderswo speichern oder sie können ihn aus anderen Daten berechnen.

Sie könnten beispielsweise Folgendes haben:

%Vor%

und implementieren Sie dann - (NSString *) fullname, um die Verkettung von Vorname und Nachname zurückzugeben.

    
Peter N Lewis 08.07.2009, 11:36
quelle
4

Ich denke, du bist ziemlich da. Die @property und @ synthesize machen die Accessor-Deklarationen und die Implementierung für den bereits deklarierten Ivar. Sie haben verschiedene Attribute, die Sie auch in der Eigenschaft @property definieren können, damit Sie steuern können, wie sie generiert wird, damit sie für den ivar geeignet ist.

Sehen Sie sich " Objective C 2.0 deklarierte Eigenschaften "

    
Kevin 08.07.2009 07:44
quelle
0

Der Unterschied zwischen Eigenschaft und Instanz ist die Variable, die Eigenschaft , die in einer anderen Klasse sichtbar sein kann, während Sie für den Zugriff auf die iVar oder Instanz das Objekt dieser Klasse erstellen müssen, auf das Sie zugreifen können. Mit dem @synthesize -Compiler wird der Setter und Getter für diese Eigenschaft generiert.

  

- (TYPE) Name; -getter Methode

     

- (void) setName: (TYP) aName; Setter-Methode

    
Sandy 03.01.2012 13:27
quelle

Tags und Links