正确地NSCopying“父”属性,使其指向已经复制的父级

时间:2013-06-13 14:41:09

标签: objective-c nscopying copywithzone

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

我不知道在B组中应该如何实施NSCopying。我看到两个明显的选择:

  1. 将父属性分配给复制的类
  2. 复制父属性并将其分配给复制的类
  3. 在第一种情况下,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类中这样做吗?

1 个答案:

答案 0 :(得分:3)

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