0

我有一个需要复制的类,它能够更改两个类上变量的值。简单地说,这些类需要始终保持彼此的克隆。我对文档的理解是,我可以使用也被声明为可变的 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 协议。

任何帮助都会很棒。

4

2 回答 2

1

你是对的,你想要的是拷贝,但你要做的是拷贝。将 [infoTextViews 复制] 更改为 [infoTextViews 保留]

小点.. allocWithZone?你的意思是 allocWithZone:zone ?普通的旧分配器可能会很好。

为什么 mutableCopyWithZone: ?ReviewViewer 有可变和不可变版本吗?你可能只想要copyWithZone:

注意:如果您覆盖 copyWithZone 以执行浅拷贝,则您在复制对象的任何地方都指定此行为。

于 2010-05-26T14:26:10.440 回答
0

为什么不能在多个地方使用类的同一个实例,而不是两个独立但相同的对象?这样,只有一个对象需要修改。一旦你做了一个副本(深或浅),你就有两个独立的对象——对一个的更改不会传播到另一个。

于 2010-05-27T00:37:54.003 回答