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

时间:2012-05-24 13:50:51

标签: objective-c ios objective-c-runtime

我想在运行时获取实例的返回值类。我有一个SEL类型var,我存储了一个选择器。我有一个名为id _instance的变量,它指向一个我知道它执行选择器的实例。在执行方法之前,我想知道是否必须这样做:

NSObject* returnValue=[_instance performSelector:_selector withObject:params.params];

或:

[_instance performSelector:_selector withObject:params.params];

我看过post where someone explain the way to have that with objective-c runtime

Method m = class_getClassMethod([_instance class], _selector);

char ret[256];
method_getReturnType(m, ret, 256);
NSLog(@"Return type: %s", ret);

但输出并不像ret是空的。

真的可以知道它是无效还是有返回类型,但我不知道在哪里搜索。我已阅读objective-c runtime reference,但我发现的唯一内容是method_getReturnType...。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

如果您正在寻找实例方法,则需要使用class_getInstanceMethod而不是class_getClassMethod。类方法和实例方法显然是不同的东西。

答案 1 :(得分:0)

经过一段时间的搜索,我发现使用Spotify的库就是这种东西,名字是MAObjcRuntime,你可以找到它here