我有一个我需要复制的类,能够在两个类上更改变量的值。简单地说,这些类需要始终保持彼此的克隆。我对文档的理解是我可以使用Class的浅层副本来做到这一点,它也被声明为可变的。通过浅层复制,将克隆变量的指针值,以便它在两个类中完全匹配。因此,当我更新原始变量时,副本将同时更新。这是对的吗?
如下所示,我在要复制的类中使用了mutableCopyWithZone。我已经尝试了NSCopyObject和allocWithZone方法来使其工作。虽然我能够复制该类并且它按预期显示,但在更新变量时,它不会更改复制的类中的值。
- (id)mutableCopyWithZone:(NSZone *)zone {
//ReviewViewer *copy = NSCopyObject(self, 0, zone);
ReviewViewer *copy = [[[self class] allocWithZone:zone] init];
copy->infoTextViews = [infoTextViews copy];
return copy;
}
infoTextViews是一个声明为非原子的属性,保留在要复制的类的头文件中。我也相应地实现了NSMutableCopying协议。
任何帮助都会很棒。
答案 0 :(得分:1)
你是对的,你想要的是浅副本,但你做的是深副本。将[infoTextViews copy]更改为[infoTextViews retain]
小点.. allocWithZone?你的意思是allocWithZone:zone?普通的旧分配可能没问题。
为什么mutableCopyWithZone:?是否有可变和不可变的ReviewViewer版本?你可能只想要copyWithZone:
注意:如果覆盖copyWithZone以执行浅表复制,则在复制对象的任何位置都指定此行为。
答案 1 :(得分:0)
为什么不能在多个地方使用同一个班级实例,而不是两个独立但相同的对象?这样,只有一个对象需要修改。复制(深或浅)后,您有两个独立的对象 - 对一个对象的更改不会传播到另一个对象。