在运行时获取返回类型的方法

时间:2014-03-31 21:35:07

标签: objective-c objective-c-runtime

我试图获得一个苹果框架的私有方法(最终重新实现一些东西),我设法轻松获得方法名称,但我根本得不到返回类型。

代码:

Method *methodList = class_copyMethodList(objc_getMetaClass("SenTestProbe"), &methodCount);
for (i=0; i<methodCount; i++) {
    NSString *methodName = NSStringFromSelector(method_getName(methodList[i]));
    char returnType[255];
    method_getReturnType(methodList[i],returnType , 255);
    struct objc_method_description *method = method_getDescription(methodList[i]);
    const char *encoding = method_getTypeEncoding(methodList[i]);
    NSLog(@"%s %s (%s) %@;",returnType,encoding,method->types,methodName);
}

输出:

v v8@0:4 (v8@0:4) load;
v v8@0:4 (v8@0:4) load;
v v8@0:4 (v8@0:4) initialize;
c c8@0:4 (c8@0:4) isTesting;
c c8@0:4 (c8@0:4) isProcessActingAsTestRig;
@ @8@0:4 (@8@0:4) testScope;
c c8@0:4 (c8@0:4) isLoadedFromApplication;
c c8@0:4 (c8@0:4) isLoadedFromTool;
@ @12@0:4@8 (@12@0:4@8) testCaseNamesForScopeNames:;
@ @8@0:4 (@8@0:4) testedBundlePath;
c c8@0:4 (c8@0:4) isInverseTestScope;
@ @16@0:4@8c12 (@16@0:4@8c12) multiTestSuiteForScope:inverse:;
v v12@0:4@8 (v12@0:4@8) runTests:;
@ @8@0:4 (@8@0:4) specifiedTestSuite;
v v16@0:4@8@12 (v16@0:4@8@12) runTestsAtUnitPath:scope:;

似乎typeEncodingmethod->types返回相同的I method_getReturnType只返回第一个字符。

任何人都可以帮我这个,我需要找到所有方法的参数,参数类型和返回类型。

感谢任何帮助。

更新

似乎我错过了encodings类型的表,它可以获得匹配的类型。谢谢@ RichardJ.RossIII的回复。

如果有人阅读@WDUK给出的帖子RunTimeBrowser链接以获取任何框架的私有标题,那么完全没有任何麻烦(特别是mac版本)。它还提供了围绕运行时框架的良好学习工具。

我希望这有助于并感谢大家的帮助。

此链接提供https://github.com/nst/iOS-Runtime-Headers

1 个答案:

答案 0 :(得分:1)

您是否只能将回报分配给id,然后打印其类?

你可以从那里开始塑造它。