是否可以检查一个子类是否实现了一个方法,该方法存在于其直接父类(super class)或其父类(super class)的某个父类(super class)中,等等?
例如我将 UIView
子类化,为我的应用创建自定义通用 View ,然后将此自定义 View 子类化。现在我的一些子类覆盖了 UIView
中的一些方法,而有些则没有。我只想在实际覆盖时调用此方法,我不想调用默认的 UIView
方法。
有没有办法检查这一点,即使用类似于 respondsToSelector:
的方法?
编辑: 此问题与 Objective-C detect if class overrides inherited method 中提出的问题不同因为我真的不知道或不想关心哪个父类(super class)最初实现了该方法。
最佳答案
基于此answer Mert Buran 着。
您可以创建一个简单的方法来检查给定的对象是否覆盖了给定的选择器(方法):
-(BOOL)checkIfObject:(id)object overridesSelector:(SEL)selector {
Class objSuperClass = [object superclass];
BOOL isMethodOverridden = NO;
while (objSuperClass != Nil) {
isMethodOverridden = [object methodForSelector: selector] !=
[objSuperClass instanceMethodForSelector: selector];
if (isMethodOverridden) {
break;
}
objSuperClass = [objSuperClass superclass];
}
return isMethodOverridden;
}
可以这样调用:
[self checkIfObject:someObject overridesSelector:@selector(someSelector)];
关于ios - 检查子类是否覆盖了一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28737116/