Правильно NSCopying "родительского" свойства, чтобы оно указывало на уже скопированного родителя
У меня есть класс A, который содержит свойство класса B. Класс B имеет слабую ссылку на свой "родительский" класс A. Оба класса реализуют NSCopying.
Я не знаю, как именно NSCopying должен быть реализован в классе B. Я вижу два очевидных варианта:
- назначить родительское свойство скопированному классу
- скопировать родительское свойство и назначить его скопированному классу
В первом случае родительское свойство в B будет указывать на оригинал A. Во втором случае родительское свойство является полностью новой копией.
Как правильно скопировать класс B, чтобы родительское свойство указывало на вновь созданную копию A в процессе NSCopying?
-(id) copyWithZone:(NSZone*)zone
{
MyClassB* copy = [[[self class] allocWithZone:zone] init];
copy->_parent = _parent; // <<-- should reference the new copy of A, but how?
return copy;
}
Я полагаю, что самым простым подходом было бы обновить родительское свойство из copyWithZone: в классе A. Но есть ли способ сделать это из класса B?
1 ответ
Я вспомнил, что это всегда было проблемой при разархивировании, поэтому единственный способ исправить это в моем случае - переписать метод copyWithZone: в категории для класса Apple, который я расширил, а затем, получив копию, пройтись по списку. объектов класса B и обновите их родительские ссылки.