我已经定义了我的协议(protocol)。我已经提到我的两个协议(protocol)方法是可选的。在运行时,如何确定特定方法是否可选?有什么办法可以查出来吗?
最佳答案
这应该做你想做的:
BOOL MethodInProtocolIsRequired(Protocol *protocol, SEL methodSelector)
{
struct objc_method_description methodDesc = protocol_getMethodDescription(protocol, methodSelector, YES, YES);
return methodDesc.name != NULL;
}
请注意,我并不是在评论在运输代码中使用它的可取性,特别是因为您还没有解释为什么要这样做。另请注意,当为协议(protocol)不包含的方法提供选择器时,此函数将返回 NO。这基本上是合理的(毕竟,如果协议(protocol)不包含方法,则不需要!),但是您可以通过检查协议(protocol)是否包含该方法作为可选方法并返回不同的内容来为函数添加复杂性所有三种情况(必需、可选、不符合协议(protocol))。
编辑:此处的简单测试程序:https://gist.github.com/4381753
关于objective-c - 如何在运行时识别协议(protocol)方法是可选的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14043930/