我如何让任何继承我的基类的类都必须覆盖特定方法?我不想使用协议,因为那样不能自动执行此行为。
@interface MyBaseClass : NSObject
{
}
- (void)performAnAction;
@end
@implementation MyBaseClass
- (void)performAnAction
{
@throw([NSException exceptionWith...]);
}
@end
我如何让任何继承我的基类的类都必须覆盖特定方法?我不想使用协议,因为那样不能自动执行此行为。
@interface MyBaseClass : NSObject
{
}
- (void)performAnAction;
@end
@implementation MyBaseClass
- (void)performAnAction
{
@throw([NSException exceptionWith...]);
}
@end
您所说的“强制覆盖它”,具体是什么意思?如果您只是像这样实现父级方法:
- (void)performAction {
NSAssert(NO, @"The method %@ in %@ must be overridden.",
NSStringFromSelector(_cmd), NSStringFromClass([self class]));
}
如果子类未能覆盖它,那么它将在运行时抛出异常。不幸的是,无法在编译时强制执行此操作。
你可以直接抛出异常。只要这是有良好文档记录的,那么在我看来,这是异常的合理使用,因为它确实是一个编程错误。
[super performAction]
的子类的人都会很快意识到在这种情况下这样做是不合适的。理想情况下,类头文件应记录任何实现者不应调用super
。 - Lily Ballard