我创建了一个符合 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;
}
我不确定它为什么失败,但我真的不明白为什么它没有 array
和objects
可变的。
感谢任何帮助。
最佳答案
我的最后一个想法:如果 setArray:
和 setObjects:
方法实际上是声明为 @property (copy)
的属性的 setter ,那么他们将复制传入的数组 - 并且 copy
始终返回一个不可变的对象。在这种情况下,解决此问题的简单方法是将它们声明为 (retain)
而不是 (copy)
。
关于objective-c - 使用-mutableCopyWithZone : on custom class makes it immutable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14841130/