我正在用我正在开发的语言和ObjC编写一座桥梁。 在目标C运行时中有几个很好的内省C函数,我能够使用method_getTypeEncoding检索方法的参数类型。
主要问题是对象参数以id(编码为@)的形式返回,但我需要的是真正的objc类名,如NSString或NSNumber。
有没有办法在不解析.h文件的情况下解决这个问题?
答案 0 :(得分:0)
知道某些内容是一个id,允许您知道参数的大小,这在编写脚本界面时很重要。添加另一个图层,您可以使用
之类的内容动态验证假设[objectPassedIn isKindOfClass: [expectedType class]];
你要小心硬编码,例如,"哦,这是一个字符串,所以寻找__NSCFString" - 因为没有办法知道你会得到__NSCFString或其他类型的实例。 NSString是一个类集群 - 使用它时可以获得任何自定义实现。
实际的对象类型对Objective-C Runtime并不重要,因此您需要添加自己的图层。您可以使用Clang / llvm作为工具获得一些有用的信息。