Правильно NSCopying "родительского" свойства, чтобы оно указывало на уже скопированного родителя

У меня есть класс A, который содержит свойство класса B. Класс B имеет слабую ссылку на свой "родительский" класс A. Оба класса реализуют NSCopying.

Я не знаю, как именно NSCopying должен быть реализован в классе B. Я вижу два очевидных варианта:

  1. назначить родительское свойство скопированному классу
  2. скопировать родительское свойство и назначить его скопированному классу

В первом случае родительское свойство в 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 и обновите их родительские ссылки.

Другие вопросы по тегам