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
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:
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:
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.
Sie können sich eine Eigenschaftsdeklaration so vorstellen, als würden zwei Accessor-Methoden deklariert. Also
%Vor%entspricht:
%Vor%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.
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.
Wenn Sie nur Getter machen oder Getter und Setter umbenennen möchten
• schreibgeschützt
• getter = newGetterName
• Setter = neuer SetterName
Beispiel
%Vor%Tags und Links objective-c getter setter