Objective-c:我如何要求覆盖而不是超级调用?

时间:2014-03-10 10:13:22

标签: ios objective-c nsobject

我想这可以通过编写@protocol来解决。

但我渴望知识。是否有一些标志或其他方式要求子类覆盖特定方法而不是调用super?与NS_REQUIRES_SUPER / objc_requires_super相反?

3 个答案:

答案 0 :(得分:1)

我在不使用任何标志的代码中这样做。
- 我在超类的方法中添加断言,如果调用此方法,则需要重写该方法

这里我有一个类fetchUserData的类应该由子类重写

- (void)fetchUserData
{
    NSString *descrip = [NSString stringWithFormat:@"child implementation for method:%@ :  %@",NSStringFromSelector(_cmd),  NSStringFromClass([self class])
    NSAssert(NO, descrip);
}

答案 1 :(得分:1)

有些事情here应该有用。

具体为subclassResponsibility:

编辑:评论中的好点 - GNUStep!=基金会。换句话说,我应该谨慎使用我链接到的页面上的方法。但是,我个人使用subclassResponsibility:并且它有效。

答案 2 :(得分:1)

如果我理解这一点,你实际上是在询问如何创建一个抽象类......强制子类实现方法。

退房:Creating an abstract class in Objective-C

简而言之,让方法抛出异常。