3

我有一个包含 B 类属性的 A 类。B 类对其“父”类 A 有一个弱引用。这两个类都实现了 NSCopying。

我不知道在 B 类中究竟应该如何实现 NSCopying。我看到了两个明显的选择:

  1. 将父属性分配给复制的类
  2. 复制父属性并将其分配给复制的类

在第一种情况下,B 中的父属性将指向原始 A。在第二种情况下,父属性是一个全新的副本。

如何正确复制 B 类,以便父属性在 NSCopying 过程中指向新创建的 A 副本?

-(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;
}

我想最简单的方法是从 A 类中的 copyWithZone: 更新父属性。但是有什么方法可以在 B 类中这样做吗?

4

1 回答 1

3

我记得取消归档时这一直是个问题,所以在我的情况下解决这个问题的唯一方法是在我扩展的 Apple 类的类别中调配 copyWithZone: 方法,然后在收到副本后浏览列表B 类对象并更新其父引用。

于 2013-06-14T12:10:08.433 回答