Objective c 如何检查一个类是否在Obj-C中实现了协议中的所有方法?

Objective c 如何检查一个类是否在Obj-C中实现了协议中的所有方法?,objective-c,protocols,Objective C,Protocols,如果一个对象符合Objective-C中的某个协议,是否有方法检查它是否符合该协议中的所有方法。我宁愿避免显式地检查每个可用的方法 谢谢您可以使用协议\u copyMethodDescriptionList获取协议中声明的所有方法,该列表返回指向对象方法\u描述结构的指针 objc\u方法\u说明在objc/runtime.h中定义: struct objc_method_description { SEL name; /**< The name of

如果一个对象符合Objective-C中的某个协议,是否有方法检查它是否符合该协议中的所有方法。我宁愿避免显式地检查每个可用的方法


谢谢

您可以使用
协议\u copyMethodDescriptionList
获取协议中声明的所有方法,该列表返回指向
对象方法\u描述
结构的指针

objc\u方法\u说明
objc/runtime.h
中定义:

struct objc_method_description {
    SEL name;               /**< The name of the method */
    char *types;            /**< The types of the method arguments */
};

默认情况下,协议方法是必需的,因此如果一个类采用给定的协议,它应该实现所有未标记为
@optional
@NoahWitherspoon的方法。我不是问如何检查协议的一致性。我想问的是如何检查实际协议中的方法是否都实现了,可能是通过有一个循环来为协议的每个方法调用respondsToSelector。要有协议的方法,请检查这不是重复的。检查类是否实际实现了协议中声明的方法。内存泄漏如果类没有实现协议中的所有方法,请添加free(methodDescrptions);在返回之前没有;或者最好在找不到的时候加个旗子,打破循环。伙计们,一个词…坏蛋。感谢塞巴斯蒂安的回答,并感谢@Johnmph的后续评论。@Johnmph谢谢,接得好!我将我的答案更新为一个返回语句。
BOOL ClassImplementsAllMethodsInProtocol(Class class, Protocol *protocol) {
    unsigned int count;
    struct objc_method_description *methodDescriptions = protocol_copyMethodDescriptionList(protocol, NO, YES, &count);
    BOOL implementsAll = YES;
    for (unsigned int i = 0; i<count; i++) {
        if (![class instancesRespondToSelector:methodDescriptions[i].name]) {
            implementsAll = NO;
            break;
        }
    }
    free(methodDescriptions);
    return implementsAll;
}