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

use*_*636 2 introspection objective-c objective-c-runtime

有这样的方法.

- (void)method: (CustomClass)param;
Run Code Online (Sandbox Code Playgroud)

CustomClass继承自NSObject.

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

char szArgType[100] = {0,};
Method m = ...;
...
method_getArgumentType(m, 2, szArgType, 100);
Run Code Online (Sandbox Code Playgroud)

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

Jos*_*ell 7

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

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