如果我可以使用Objective-C协议并试图弄清楚如何查看它的内部,以查看其包含的方法,包括其签名等。

我已经尝试过NSLog并在调试器中以及在Internet上查找对象,但找不到任何方法来执行此操作。

最佳答案

在看到此SO帖子List selectors for Objective-C object的答案后,我在objc / runtime.h中检出了方法,并找到了一种记录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并为每个列表打印结果。

09-04 18:26