我有一个类MyClass
,它实现了NSCopying
协议,我有一个类MyClassChild
,它继承自MyClass
。 MyClassChild
未实施NSCopying
协议。我正在阅读的教科书说它必须,但我可以成功建立!教科书错了吗?
@interface MyClass : NSObject <NSCopying> {
}
@end
@implementation MyClass
-(id)copyWithZone:(NSZone *)zone
{
return self;
}
@end
@interface MyClassChild : MyClass {
}
@end
@implementation MyClassChild
@end
答案 0 :(得分:2)
如果不在copyWithZone:
中为MyClassChild
方法提供实现,则该类从其超类(MyClass
)继承方法实现。这意味着MyClassChild
符合NSCopying
协议。如果MyClassChild
在复制实例时需要执行一些特殊操作,则应覆盖copyWithZone:
并执行需要执行的操作。希望有所帮助。
P.S。我希望您意识到返回self
不是实施copyWithZone:
的好方法吗?
答案 1 :(得分:1)
MyClassChild
从NSCopying
继承了MyClass
的实施。即使你已经指定了
@interface MyClassChild : MyClass <NSCopying>
编译器足够聪明,可以检查是否有任何超类实现-copyWithZone:
答案 2 :(得分:0)
NSCopying
要求对象实现copyWithZone
,你是绝对正确的。但是,MyClass
实现了copyWithZone
。所以MyClassChild
已经通过派生MyClass
来实现它。