Ihre Frage hat wegen der Wahl der Namen einige Verwirrung verursacht.
In Objective-C gibt es eine Standardmethode copy
- durch NSObject
umgesetzt wird - die ein brandneues Objekt zurückgibt, das ist eine Kopie oder ein Klon, des vorhandenen Objekts.
Ihr Titel:
Wie man ein Objekt der Klasse in einer anderen Klasse Objekt
könnte lesen, wie Sie mit den Werten eines anderen überschreiben ein vorhandenes Objekt zu wollen, kopieren, und Ihre copy:
Methode tut genau das:
-(void) copy: (Fraction*) f {
self.num = f.num;
self.denom = f.denom;
self.label = f.label;
}
diese ersetzt/überschreibt die Werte der aktuellen Objekteigenschaften (self
) mit den Werten der Eigenschaften eines anderen Objekts (f
). In Objective-C copy:
zu nennen ist eine schlechte Wahl aufgrund der Existenz von copy
, die ein neues Objekt erzeugt.
Ihre Code-Fehler, wie Sie copy
anrufen, nicht Ihre eigenen copy:
. Versuchen Sie stattdessen:
Fraction *g = [Fraction some initializer here]; // your original object
Fraction *f = [Fraction new]; // another object, with some default values
[f copy:g]; // set f's properties from g's
Diese Arbeit sollte aber ist verwirrend, da (a) es copy:
genannt wird, und (b) es eigentlich nicht kopieren Sie die label
Eigentum an allen als Aktien das gleiche Objekt zwischen f
& g
. Wenn das Objekt ist unveränderlich (NSString
), die keinen Unterschied machen wird, aber wenn es wandelbar ist (NSMutableString
) dann g
mutiert s ‚s label
auch f
mutieren‘. \
Wenn Sie dies Sie vielleicht tun müssen, rufen Methode reinitFrom:
, oder etwas, anstatt copy:
.
HTH
Dies riecht nach einem sehr alten Tutorial oder einem Beispiel, das nicht von einer Foundation-Basisklasse abgeleitet ist. – bbum