如何在(编译前或实际)编译时访问从头文件中收集的Objective-C类接口定义,以便我可以提供对定义的公共接口真实的内省。
问题:F-Script,SuperDB,IKBClassBrowser,CBIntrospection使用class_copyPropertyList()系列函数在运行时内省对象。虽然功能强大,但也有缺点...
目标:我正在研究iOS应用程序,以帮助通过实时/即时开发环境(类似于SmallTalk,F-Script,SuperDB,IKBClassBrowser,CBIntrospection)教授编码。我希望用户能够内省对象,发送消息,创建新对象,以及通过VM构建和运行代码。 但我想将功能限制为公共功能(否则Apple无法批准该应用程序)和我希望能够访问类型,因此我限制所以用户只能传递合法对象
我希望有一些方法可以访问 Clang 或符号文件来提取这些信息,我可以在运行时使用它。它不必完全自动化(我可能希望在某些方面限制功能)
答案 0 :(得分:1)
您遇到了Objective-C的一个显着特征:没有私有或公共API。只有文档化的API与未记录的API。您可以随时调用任何对象上的任何方法,无论它是否出现在头文件中。公共/私有区别仅存在于编译器中;在运行时,它们不存在,并且没有办法反转过程并辨别头文件可能说的内容。