Objective c 子类必须实现其父类所遵循的协议吗?
我有一个类,Objective c 子类必须实现其父类所遵循的协议吗?,objective-c,protocols,subclassing,Objective C,Protocols,Subclassing,我有一个类,MyClass,它实现了NSCopying协议,还有一个类,MyClassChild,它继承自MyClassMyClassChild未实现NSCopying协议。我正在读的教科书说它必须,但我可以成功地建立!教科书错了吗 @interface MyClass : NSObject <NSCopying> { } @end @implementation MyClass -(id)copyWithZone:(NSZone *)zone { return se
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
@接口MyClass:NSObject{
}
@结束
@MyClass的实现
-(id)copyWithZone:(NSZone*)区
{
回归自我;
}
@结束
@接口MyClassChild:MyClass{
}
@结束
@MyClassChild的实现
@结束
您完全正确地认为,NSCopying
要求对象实现copyWithZone
。但是,MyClass
实现了copyWithZone
。因此,MyClassChild
已经通过从MyClass
派生实现了它。当您没有为MyClassChild
中的copyWithZone:
方法提供实现时,该类从其超类(MyClass
)继承方法实现。这意味着MyClassChild
确实符合NSCopying
协议。如果在复制其实例时,MyClassChild
需要执行一些特殊操作,则应覆盖copyWithZone:
,并在那里执行任何需要执行的操作。希望有帮助
另外,我希望您认识到,返回
self
并不是实现copyWithZone:
?MyClassChild
继承了NSCopying
的实现。即使你指定了
@interface MyClassChild : MyClass <NSCopying>
@接口MyClassChild:MyClass
编译器足够聪明,可以检查是否有任何超类实现了
-copyWithZone:
-1 NSObject没有实现-copyWithZone:
,这是一个重要的方法。它确实实现了+copyWithZone:
,但这是一个类方法。哎哟,你说得对。我甚至没有正确回答这个问题。这不是“不好”,这是完全错误的(除了在GC环境中)。您至少需要返回[self-retain]代码>然后只针对不可变对象。是的,只是为了快速编译它