我试图获得一个苹果框架的私有方法(最终重新实现一些东西),我设法轻松获得方法名称,但我根本得不到返回类型。
代码:
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:;
似乎typeEncoding
和method->types
返回相同的I method_getReturnType
只返回第一个字符。
任何人都可以帮我这个,我需要找到所有方法的参数,参数类型和返回类型。
感谢任何帮助。
更新
似乎我错过了encodings类型的表,它可以获得匹配的类型。谢谢@ RichardJ.RossIII的回复。
如果有人阅读@WDUK给出的帖子RunTimeBrowser链接以获取任何框架的私有标题,那么完全没有任何麻烦(特别是mac版本)。它还提供了围绕运行时框架的良好学习工具。
我希望这有助于并感谢大家的帮助。
答案 0 :(得分:1)
您是否只能将回报分配给id
,然后打印其类?
你可以从那里开始塑造它。