如何判断超类是否也实现了子类实现的同一个方法?

5
我想知道超类是否实现了我的子类也实现的A方法,以便我可以在我的子类中安全调用[super A]而不会抛出异常。NSObject的respondsToSelector:在这种情况下不起作用,因为它总是返回true(因为我的子类实现了该方法)。有什么想法吗?
3个回答

12
你可以使用类方法instancesRespondToSelector:来完成此操作。因此,你可以从子类中调用[[self superclass] instancesRespondToSelector:@selector(...)]来确定父类是否实现了你需要的方法。

类方法的等效方法是什么?比如说,我想测试一个类级别的选择器是在它的超类中还是在子类中? - jAckOdE

2
调用 [[self superclass] instancesRespondToSelector:@selector(...)] 不会起作用,如果实现它的类被子类化,并且该方法在子类化的类的实例上调用。 一个解决方案是明确指定实现它的当前类的名称:
[[ExplicitClassName superclass] instancesRespondToSelector:@selector(...)]

0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接