2012-10-11 70 views
7

大家好,我有一个奇怪的问题。我想从一个文件在运行时创建一个Objective C类。所以例如我有一个客观的c应用程序,然后我想将它指向一个文本文件(或者一个.h.m对,无论什么作品),然后让应用程序解析文本文件并在运行时创建类(Class no目的)。当然,我会写解析器和所有我想知道的东西是否可能。我读这两篇文章:我可以在运行时从文本文件创建一个Objective-C类吗?

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函数来完成。如果我可以找到一种方法来使用字符串来完成相同的功能,那么我就不必在编译时定义它们。

+0

啧加载到自己的进程中这将是很容易改变它。你想重新实现clang和链接器?你知道那是多少工作吗? – trojanfoe

+0

你应该可以调用clang编译你的源代码来生成一个动态库/ bundle,然后你可以使用NSBundle加载 – nielsbot

+0

对于objective-c文件没有太大的意义 - 因为你应该使用clang(或者铿锵声来源)...如果你有兴趣创建自定义语言,那更有意义... – nielsbot

回答

1

当然。完全可能。

我建议从Objective-C support in this开始,因为它包含一个完整的Objective-C语法分析器和代码生成器。

2

这就是所谓的反射式编程。我认为Obj-C没有代码评估支持,因为它不是一种脚本语言,所以Obj-C的反射概念被静静地限制了。另外,在运行时,编译器已经将代码转换为Obj-C铿锵声代码,这是一项非常耗时的工作,只需要反向转换字节码并重新编译它即可

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

1

看到我的github项目可可间断器它做你想要的一部分。

它需要一个文本文件并在运行时编译它,然后使用NSTask运行生成的可执行文件。所以二进制文件使用一个NSBundle

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

相关问题