有这样的方法。
- (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
获取参数的真实对象类类型?
答案 0 :(得分:7)
不可能这样做。接口类型(类)仅由编译器使用,并且在对方法签名进行编码时不保留该信息。
您可以在运行时获得的唯一信息是运行时指南的Type Encodings chapter中描述的内容,即参数是否是对象而不是任何各种POD类型。 任何对象的编码都是相同的,无论它是哪个类,你在那里看到@
。 (基本上,在编译器完成类型检查后,一切都是id
。)