我想允许对我的类对象进行深层复制,并且正在尝试实现 copyWithZone 但对 [super copyWithZone:zone] 的调用产生了错误:

error: no visible @interface for 'NSObject' declares the selector 'copyWithZone:'

@interface MyCustomClass : NSObject

@end

@implementation MyCustomClass

- (id)copyWithZone:(NSZone *)zone
{
    // The following produces an error
    MyCustomClass *result = [super copyWithZone:zone];

    // copying data
    return result;
}
@end

我应该如何创建此类的深拷贝?

最佳答案

您应该将 NSCopying 协议(protocol)添加到类的接口(interface)中。

@interface MyCustomClass : NSObject <NSCopying>

那么方法应该是:
- (id)copyWithZone:(NSZone *)zone {
    MyCustomClass *result = [[[self class] allocWithZone:zone] init];

    // If your class has any properties then do
    result.someProperty = self.someProperty;

    return result;
}
NSObject 不符合 NSCopying 协议(protocol)。这就是你不能调用 super copyWithZone: 的原因。

编辑:根据 Roger 的评论,我更新了 copyWithZone: 方法中的第一行代码。但是根据其他评论,可以安全地忽略该区域。

关于ios - 错误 : no visible @interface for 'NSObject' declares the selector 'copyWithZone:' ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13616816/

10-09 20:31