使用-mutableCopyWithZone:自定义类使不变(Using -mutableCopyW

2019-10-17 16:54发布

我已经创建了符合自定义类NSCopyingNSMutableCopying

我已经添加了一个实现-copyWithZone:-mutableCopyWithZone:但每当我打电话-mutableCopy我的对象,并尝试调用另一个方法,它崩溃,因为一些高德已经成为不可改变的,即使我呼吁-mutableCopyWithZone:上实例变量。

下面是我如何复制我的课:

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

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

下面是我如何复制类:

- (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可变的。

任何帮助表示赞赏。

Answer 1:

我最后的想法:如果setArray:setObjects:方法实际上是setter方法声明为特性@property (copy) ,那么他们就会在复制传递的阵列-和copy始终返回不可变对象。 在这种情况下,简单的方法来解决这一问题将被声明为(retain) ,而不是(copy)



文章来源: Using -mutableCopyWithZone: on custom class makes it immutable