Ios 目标c:我怎么能要求超控而不呼叫super?

Ios 目标c:我怎么能要求超控而不呼叫super?,ios,objective-c,nsobject,Ios,Objective C,Nsobject,我想这可以通过编写@协议来解决 但我渴望知识。是否有某种标志或其他方式要求子类重写特定方法而不调用super?就像NS_REQUIRES_SUPER/objc_REQUIRES_SUPER的对立面一样 我在代码中不使用任何标志 -我在超类的方法中添加断言,如果调用该方法,则需要重写该断言 这里我有一个类,它有一个方法fetchUserData,应该被子类覆盖 - (void)fetchUserData { NSString *descrip = [NSString stringWithF

我想这可以通过编写@协议来解决


但我渴望知识。是否有某种标志或其他方式要求子类重写特定方法而不调用super?就像NS_REQUIRES_SUPER/objc_REQUIRES_SUPER的对立面一样

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

这里我有一个类,它有一个方法
fetchUserData
,应该被子类覆盖

- (void)fetchUserData
{
    NSString *descrip = [NSString stringWithFormat:@"child implementation for method:%@ :  %@",NSStringFromSelector(_cmd),  NSStringFromClass([self class])
    NSAssert(NO, descrip);
}
有些东西应该是有用的

特别是
子条款责任:


编辑:评论中的好观点-GNUStep!=基金会。换句话说,我链接到的页面上的方法应该谨慎使用。然而,我个人使用了
子类responsibility:
,它是有效的。

如果我理解正确,那么你本质上是在问如何创建一个抽象类。。。强制子类实现方法

退房:


简而言之,让该方法引发异常。

我在超类中见过一个NSAssert,如果调用超类,它可能会引发异常。不确定,但您可以使用category进行重写(但这是不可取的)。我认为您需要做的是测试实例的类(使用
isMemberOfClass
,而不是
iskinofclass
)如果类与方法的类不同,则抛出断言。@HotLicks和这些测试通常可以在
-init
中完成?您应该在应该被重写的方法中进行测试。您是对的@hfossli,谢谢。更新了我的答案:)GNUStep!=基础