如何验证协议在运行时定义选择器?

时间:2014-06-26 20:18:56

标签: objective-c

给定一个选择器

SEL selector = NSSelectorWithString(someSelectorName);

和协议:

Protocol protocol = NSProtocolFromString(someProtocolName);

我如何检查协议中定义的选择器?

BOOL hasSelector = protocolHasSelector(protocol, selector);

1 个答案:

答案 0 :(得分:2)

Objective-C运行时提供名为protocol_getMethodDescription的函数。您可以使用它来确定协议是否定义了选择器:

  

返回值

     

objc_method_description结构,描述 aSel isRequiredMethod isInstanceMethod 为协议 p指定的方法

     

如果协议不包含指定的方法,则返回值为objc_method_description的{​​{1}}结构。

要使用此功能,您必须{NULL, NULL}#import <objc/runtime.h>

请注意,您可能需要使用@import ObjectiveCisRequiredMethod的每个值组合调用最多四次方法。如果你只关心实例方法(不是类方法),你可能仍然想要调用它两次(isInstanceMethod YESisRequiredMethod一次)。