我有一个包含 B 类属性的 A 类。B 类对其“父”类 A 有一个弱引用。两个类都实现了 NSCopying。
我不知道 NSCopying 到底应该如何在类 B 中实现。我看到了两个明显的选择:
- 将父属性分配给复制的类
- 复制父属性并将其分配给复制的类
在第一种情况下,B 中的父属性将指向原始 A。在第二种情况下,父属性是一个全新的副本。
如何在 NSCopying 过程中正确复制类 B,使其父属性指向 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 类中这样做吗?
最佳答案
我记得这在解压时一直是个问题,所以解决这个问题的唯一方法是在我扩展的 Apple 类的类别中调整 copyWithZone: 方法,然后在收到副本后我去通过 B 类对象列表并更新它们的父引用。
关于objective-c - 正确 NSCopying "parent"属性,使其指向其已复制的父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17089939/