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

标签 objective-c cocoa class nscopying nsmutablecopying

我创建了一个符合 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/

相关文章:

c++ - 通过类引用

c++ - 类构造函数 C++ 的段错误

objective-c - 在 NSScrollView 内的 View 中使用模式图像

objective-c - "Cinch App"是怎么做到的呢?

javascript - typescript :将方法添加到类的数组

objective-c - NSUserScriptTask 困难

objective-c - 与 Interface Builder 等价的 NSTextfield 键

ios - Swift 扩展 - 方法与之前使用相同 Objective-C 选择器的声明冲突

ios - EXC_BAD_ACCESS 在停止 MPMoviePlayerController 时崩溃

objective-c - 在多个类中使用 *value