有没有办法从Method结构中获取参数的类类型?

时间:2013-01-09 03:26:22

标签: objective-c introspection objective-c-runtime

有这样的方法。

- (void)method: (CustomClass)param;

CustomClass继承自NSObject

下面有一个变量m,它是该方法的Method结构。 我调用method_getArgumentType()来获取这样的参数类型:

char szArgType[100] = {0,};
Method m = ...;
...
method_getArgumentType(m, 2, szArgType, 100);

我打印了szArgType。它打印了@,但我要打印CustomClass。 有没有一种很好的方法可以在运行时从Method获取参数的真实对象类类型?

1 个答案:

答案 0 :(得分:7)

不可能这样做。接口类型(类)仅由编译器使用,并且在对方法签名进行编码时不保留该信息。

您可以在运行时获得的唯一信息是运行时指南的Type Encodings chapter中描述的内容,即参数是否是对象而不是任何各种POD类型。 任何对象的编码都是相同的,无论它是哪个类,你在那里看到@。 (基本上,在编译器完成类型检查后,一切都是id。)