gpt4 book ai didi

objective-c - 我如何知道实例是否实现了 Objective-C 中的方法?

转载 作者:太空狗 更新时间:2023-10-30 04:01:45 25 4
gpt4 key购买 nike

我想知道一个实例是否实现了一个特定的方法。我可以使用 respondsToSelector: 但如果实例继承了该方法,它会返回 YES...

我可以遍历 class_copyMethodList() 的方法,但由于我可能想检查很多实例,所以我想知道是否有更简单的解决方案(例如 repondsToSelector: ,但仅限于类本身......)

编辑:因为我真的认为没有函数或方法可以做到这一点,所以我写了我的。感谢您的回答,如果它有任何用处,这里是方法:

+ (BOOL)class:(Class)aClass implementsSelector:(SEL)aSelector
{
Method *methods;
unsigned int count;
unsigned int i;

methods = class_copyMethodList(aClass, &count);
BOOL implementsSelector = NO;
for (i = 0; i < count; i++) {
if (sel_isEqual(method_getName(methods[i]), aSelector)) {
implementsSelector = YES;
break;
}
}
free(methods);
return implementsSelector;
}

最佳答案

检查您自己的类返回的方法是否与您的父类(super class)返回的方法相同或不同可能更容易。

if ([[obj class] instanceMethodForSelector:sel] != [[obj superclass] instanceMethodForSelector:sel]) {
NSLog(@"%@ directly implements %@", [obj class], NSStringFromSelector(sel));
}

关于objective-c - 我如何知道实例是否实现了 Objective-C 中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2575344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com