2012-10-11 69 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

相關問題