如何查看目标C协议的内容?

时间:2015-11-17 21:25:06

标签: ios objective-c debugging protocols

如果我可以访问Objective-C协议并试图弄清楚如何查看它包含的内容,包括它们的签名等等。

我已经尝试过NSLog并在调试器和互联网上查看对象,但找不到任何方法。

1 个答案:

答案 0 :(得分:3)

在看到这个SO帖子的答案后,我查看了objc / runtime.h中的方法:List selectors for Objective-C object并找到了一种方法来NSLog协议的方法签名

#import <objc/runtime.h>

Protocol *protocol = @protocol(UITableViewDelegate);

BOOL showRequiredMethods = NO;
BOOL showInstanceMethods = YES;

unsigned int methodCount = 0;
struct objc_method_description *methods = protocol_copyMethodDescriptionList(protocol, showrequiredMethods, showInstanceMethods, &methodCount);

NSLog(@"%d required instance methods found:", methodCount);

for (int i = 0; i < methodCount; i++)
{
    struct objc_method_description methodDescription = methods[i];
    NSLog(@"Method #%d: %@", i, NSStringFromSelector(methodDescription.name));
}

free(methods)

唯一的问题是,在protocol_copyMethodDescriptionList中,您需要指定是否需要必需与非必需的方法以及是否需要类与实例方法。因此,要覆盖所有四种情况,您需要调用protocol_copyMethodDescriptionList四次并打印每个列表的结果。