gpt4 book ai didi

objective-c - 使用-mutableCopyWithZone : on custom class makes it immutable

转载 作者:行者123 更新时间:2023-12-03 16:58:01 25 4
gpt4 key购买 nike

我创建了一个符合 NSCopying 的自定义类和NSMutableCopying .

我添加了 -copyWithZone: 的实现和-mutableCopyWithZone: ,但每当我打电话 -mutableCopy在我的对象上并尝试调用另一个方法,它崩溃了,因为一些 ivars 已经变得不可变,即使我调用 -mutableCopyWithZone:关于伊瓦尔。

以下是我复制类(class)的方法:

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

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

这是我复制类(class)的方法:

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

感谢任何帮助。

最佳答案

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

关于objective-c - 使用-mutableCopyWithZone : on custom class makes it immutable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14841130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com