我可以在运行时从文本文件创建一个Objective-C类吗?



我想在运行时从文件创建一个 Objective C 类。因此,例如,我有一个目标 c 应用程序,我想将其指向文本文件(或 .h .m 对,无论什么工作),然后让应用程序解析文本文件并在运行时创建类(类无对象)。当然,我会编写解析器和所有这些东西,我只想知道是否可能。我读了这两篇文章:

http://www.mikeash.com/pyblog/friday-qa-2010-11-6-creating-classes-at-runtime-in-objective-c.html

http://www.mikeash.com/pyblog/friday-qa-2010-11-19-creating-classes-at-runtime-for-fun-and-profit.html

这显示了如何在运行时创建一个目标 C 类,但它是使用编译时定义的 C 函数完成的。如果我能找到一种方法来使用字符串来定义完美的函数来做同样的事情,因为这样我就不必在编译时定义它们。

这就是

所谓的反射式编程。我想 Obj-C 没有代码评估支持,因为它不是一种脚本语言,所以 Obj-C 的反射概念是悄悄限制的。另外,在运行时,编译器已经将代码转换为 Obj-C clang 代码,仅反向翻译字节码并再次重新编译它是一项非常耗时的工作。

对于 Obj-C 反射,您可以参考这些答案

  • 构建一个类:按名称创建 objective-c 类实例?
  • 实现一种方法:Objective-C,如何在另一个类中挂接一个方法
  • 更改对象的类:Objective-C:如何在运行时更改对象的类?

当然。 完全有可能。

我建议从Objective-C支持开始,因为它包括一个完整的Objective-C解析器和代码生成器。

看看我的 GitHub 项目 cocoa-interprreter 它做了你想要的一部分。

获取一个文本文件并在运行时编译它,然后使用 NSTask 运行生成的可执行文件。更改它非常容易,因此使用 NSBundle 将二进制文件加载到自己的进程中

https://github.com/Daij-Djan/cocoa-interpreter

最新更新