2013-01-09 45 views
2

有一种这样的方法。有没有办法从Method结构中获取参数的类类型?

- (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

另请参阅:[如何获取ivar的ObjC类?](http://stackoverflow.com/questions/11265503/如何做我的目标-c-class-ivar/11266383#11266383) –

回答

7

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

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

+0

谢谢。你的回答帮助了我。我使用结构而不是类,所以我可以通过method_getArgumentType方法检查结构名称。 – user1705636

+0

聪明的解决方案!很高兴我能帮上忙。 –

相关问题