1

我创建了一个符合NSCopyingand的自定义类NSMutableCopying

-copyWithZone:我已经为and添加了一个实现-mutableCopyWithZone:,但是每当我调用-mutableCopy我的对象并尝试调用另一个方法时,它就会崩溃,因为一些 ivars 已经变得不可变,即使我调用-mutableCopyWithZone:了 ivars。

这是我复制课程的方式:

MyObject *flipped = [list mutableCopy];
[MyObject flip:flipped];

(代码在 上失败+flip:,因为它试图在ivar上使用removeObjectAtIndex:和)addObject:NSMutableArray

这是我复制课程的方式:

- (id)mutableCopyWithZone:(NSZone *)zone {

    id instance = nil;

    if ((instance = [[[self class] alloc] init])) {

        [instance setArray:[self.array mutableCopyWithZone:zone]];
        [instance setObjects:[self.objects mutableCopyWithZone:zone]];

        [instance setItemCount:self.itemCount];

    }

    return instance;

}

我不确定它为什么会失败,但我真的不明白为什么它不生成arrayobjects可变。

任何帮助表示赞赏。

4

1 回答 1

3

我的最后一个想法:如果setArray:andsetObjects:方法实际上是声明为的属性的设置器@property (copy),那么它们将复制传入的数组 - 并copy始终返回一个不可变对象。在这种情况下,解决此问题的简单方法是将它们声明为(retain)而不是(copy).

于 2013-02-12T20:42:29.693 回答