桥到objc,它怎么知道参数类型?

时间:2015-03-16 17:18:54

标签: objective-c compilation scripting-bridge

我正在用我正在开发的语言和ObjC编写一座桥梁。 在目标C运行时中有几个很好的内省C函数,我能够使用method_getTypeEncoding检索方法的参数类型。

主要问题是对象参数以id(编码为@)的形式返回,但我需要的是真正的objc类名,如NSString或NSNumber。

有没有办法在不解析.h文件的情况下解决这个问题?

1 个答案:

答案 0 :(得分:0)

知道某些内容是一个id,允许您知道参数的大小,这在编写脚本界面时很重要。添加另一个图层,您可以使用

之类的内容动态验证假设
[objectPassedIn isKindOfClass: [expectedType class]];

你要小心硬编码,例如,"哦,这是一个字符串,所以寻找__NSCFString" - 因为没有办法知道你会得到__NSCFString或其他类型的实例。 NSString是一个类集群 - 使用它时可以获得任何自定义实现。

实际的对象类型对Objective-C Runtime并不重要,因此您需要添加自己的图层。您可以使用Clang / llvm作为工具获得一些有用的信息。