Ваш вопрос вызвал некоторую путаницу из-за выбора имен.
В Objective-C есть стандартный метод copy
- это реализуется NSObject
- которая возвращает новый объект, который является копией или клона, существующего объекта.
Ваше название:
Как скопировать объект класса в другой класс объекта
может быть истолковано как вы желая перезаписать существующий объект со значениями другого, и ваш метод copy:
делает именно это:
-(void) copy: (Fraction*) f {
self.num = f.num;
self.denom = f.denom;
self.label = f.label;
}
это заменяет/перезаписывает значения свойств текущего объекта (self
) со значениями свойств другого объекта (f
). Вызов copy:
в Objective-C является плохим выбором из-за существования copy
, который создает новый объект.
Код ошибки, так как вы звоните copy
, а не ваш собственный copy:
. Попробуйте вместо этого:
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
Это должно работать, но сбивает с толку, как (а) называется copy:
и (б) он фактически не копировать label
собственность на всех, но акций тот же объект между f
& g
, Если этот объект является неизменяемым (NSString
), что не будет никакой разницы, но если это изменяемые (NSMutableString
), то мутирует g
«s label
также мутирует f
» с. \
Если вы должны сделать это, может быть, позвоните в метод reinitFrom:
, или что-то, а не copy:
.
HTH
Это пахнет либо очень старым учебником, либо примером, не полученным из базового класса Foundation. – bbum