2013-06-13 2 views
3

У меня есть класс A, который содержит свойство класса B. Класс B имеет слабую ссылку на его «родительский» класс A. Оба класса реализуют NSCopying.Правильно NSCopying свойство «parent», которое указывает на его уже скопированный родительский объект

Я не знаю, как именно 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: в классе А. Но есть ли способ, что я могу сделать это внутри класса B?

ответ

3

Я помню, что это всегда было проблемой при распаковке, поэтому единственный способ исправить это в моем случае - это использовать метод copyWithZone: в категории для расширения класса Apple I, а затем после получения копии I перейдите в список объектов класса B и обновите их родительские ссылки.