如何在运行时访问类的源级别定义?

时间:2014-03-02 20:38:42

标签: ios xcode clang objective-c-runtime f-script

如何在(编译前或实际)编译时访问从头文件中收集的Objective-C类接口定义,以便我可以提供对定义的公共接口真实的内省。

问题:F-Script,SuperDB,IKBClassBrowser,CBIntrospection使用class_copyPropertyList()系列函数在运行时内省对象。虽然功能强大,但也有缺点...

  1. 运行时没有私有和公共的概念......一切都是 返回
  2. 我看不到访问ObjC类型的可靠方法 方法参数和返回
  3. 目标:我正在研究iOS应用程序,以帮助通过实时/即时开发环境(类似于SmallTalk,F-Script,SuperDB,IKBClassBrowser,CBIntrospection)教授编码。我希望用户能够内省对象,发送消息,创建新对象,以及通过VM构建和运行代码。 但我想将功能限制为公共功能(否则Apple无法批准该应用程序)和我希望能够访问类型,因此我限制所以用户只能传递合法对象

    我希望有一些方法可以访问 Clang 符号文件来提取这些信息,我可以在运行时使用它。它不必完全自动化(我可能希望在某些方面限制功能)

1 个答案:

答案 0 :(得分:1)

您遇到了Objective-C的一个显着特征:没有私有或公共API。只有文档化的API与未记录的API。您可以随时调用任何对象上的任何方法,无论它是否出现在头文件中。公共/私有区别仅存在于编译器中;在运行时,它们不存在,并且没有办法反转过程并辨别头文件可能说的内容。