Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 我怎样才能知道超类是否也实现了我的子类实现的相同方法?_Objective C_Ios - Fatal编程技术网

Objective c 我怎样才能知道超类是否也实现了我的子类实现的相同方法?

Objective c 我怎样才能知道超类是否也实现了我的子类实现的相同方法?,objective-c,ios,Objective C,Ios,我想知道超类是否从我的子类实现了方法A,它也实现了方法A,这样我就可以安全地从我的子类调用[super A],而不会出现异常 NSObject的respondsToSelector:在这种情况下不起作用,因为它将始终返回true(因为我的子类实现了所讨论的方法)。有什么想法吗?您可以使用class方法instancesRespondToSelector:来实现这一点。因此,您可以从子类调用[[self-superclass]instanceRespondToSelector:@selector(

我想知道超类是否从我的子类实现了方法A,它也实现了方法A,这样我就可以安全地从我的子类调用[super A],而不会出现异常


NSObject的respondsToSelector:在这种情况下不起作用,因为它将始终返回true(因为我的子类实现了所讨论的方法)。有什么想法吗?

您可以使用class方法
instancesRespondToSelector:
来实现这一点。因此,您可以从子类调用
[[self-superclass]instanceRespondToSelector:@selector(…)]
,以确定超类是否实现了所需的方法。

尝试[[self-class]superclass]instanceRespondToSelector:@selector(.)]]


[super respondsToSelector:]调用超类的respondsToSelector实现,该实现可能与当前类的实现相同。它不检查超类是否实现了该方法。

如果实现它的类是子类并且在子类的实例上调用了该方法,则调用
[[self superclass]instanceRespondtoSelector:@selector(…)]
将不起作用。 一种解决方案是显式键入实现它的当前类的名称:

[[ExplicitClassName superclass] instancesRespondToSelector:@selector(...)]

类方法的等价物是什么?比如说,我想测试类级选择器是在它的超类中还是在它的子类中?