Ziel-C Getter / Setter

8

Ich versuche, mich durch ein Objective-C-Tutorial zu arbeiten. In dem Buch gibt es dieses Beispiel:

%Vor%

Ich dachte, "hey, es gibt kein Getter / Setter für das XYPoint-Objekt. Der Code funktioniert aber." Jetzt werde ich vielleicht meine eigene Frage beantworten:).

Ich denke es ist, weil "Ursprung" bereits ein Zeiger ist, und was unter der Haube mit "Breite" und "Höhe" geschieht, ist, dass es einen Zeiger auf sie gibt.

Bin ich richtig, oder rede ich BS :) ??

Ich verstehe es einfach nicht. Hier ist main:

%Vor%

Und hier ist das Rectangle-Objekt:

%Vor%

Was ich nicht verstehe, ist diese Zeile in main: myRect.origin = myPoint; Ich habe keinen Setter dafür gemacht.

BTW danke für Ihre schnelle Antwort ist

    
pic-o-matic 11.04.2010, 09:34
quelle

5 Antworten

20
  

Was ich nicht verstehe, ist diese Zeile in main: myRect.origin = myPoint; Ich habe keinen Setter dafür gemacht.

There ist sowohl ein Getter als auch ein Setter (gemeinsam als Accessoren bezeichnet), die für origin in der Klasse Rectangle erstellt wurden. Wenn Sie in der Implementierung für Rectangle nachsehen, ist dies der Getter:

%Vor%

und das ist der Setter:

%Vor%

Und ab Objective-C 2.0 Aufruf:

%Vor%

entspricht:

%Vor%

Getter und Setter mit @property zu deklarieren (und sie dann mit @synthesize zu implementieren) ist nur eine Möglichkeit, Zugriffsberechtigungen zu deklarieren und zu erstellen, und dient der Bequemlichkeit, wenn Sie viele Eigenschaften in der Klassenschnittstelle deklarieren müssen. Wie Schildmeijer sagte, @property int width entspricht der Deklaration zweier Methoden:

%Vor%

Aufgrund der dynamisch gebundenen Natur der Methodenaufrufe von Objective-C müssen Sie nicht einmal die Getter- und Setter-Methoden in der Schnittstelle deklarieren, obwohl dies im Allgemeinen empfohlen wird wenn Sie sie öffentlich für andere Klassen verfügbar machen.

    
Alex Rozanski 11.04.2010, 11:25
quelle
6

Sie können sich eine Eigenschaftsdeklaration so vorstellen, als würden zwei Accessor-Methoden deklariert. Also

%Vor%

entspricht:

%Vor%     
Schildmeijer 11.04.2010 09:41
quelle
0

Sie sagen nicht, welcher Code funktioniert oder was Ihre Erwartungen für "arbeiten" sind.

Die obige Schnittstelle erzeugt einfache Zugriffsmethoden für Breite und Höhe, die von anderen Objekten als [object setWidth:1]; oder object.width = 1; aufgerufen werden können - diese beiden sind analog.

Origin ist ein anderer Objekttyp und ist ein Zeiger, ja. Aber Sie möchten immer noch eine Eigenschaft deklarieren, um Accessormethoden zu generieren.

    
Paul Lynch 11.04.2010 09:42
quelle
0

Getter und Setter sind vor allem nützlich, wenn Sie auf eine Instanzvariable von einer anderen Klasse zugreifen müssen oder Bindungen verwenden, um sie zu erhalten / setzen. Also meine Vermutung wäre, dass Sie diese Funktionalität für die Breite und Höhe benötigen, nicht aber für den Ursprung. Beachten Sie, dass die Getter / Setter nicht Zeiger aus den ganzen Zahlen machen, wie Sie angegeben haben, könnte der Grund dafür sein. Ints sind Ints und Getter / Setter ändern das nicht.

    
regulus6633 11.04.2010 09:45
quelle
0
%Vor%

Wenn Sie nur Getter machen oder Getter und Setter umbenennen möchten

• schreibgeschützt

• getter = newGetterName

• Setter = neuer SetterName

Beispiel

%Vor%     
Mohamed Ali 13.03.2015 12:00
quelle

Tags und Links