2012-01-09 5 views
7

Objective-Cは基本的にCの拡張版なので、コードをネイティブコードにコンパイルする前に純粋なCコードに変換しますか?すべてのObjective CプログラムはCコードに変換されますか?

もしそうなら、RAM上で変換が行われるか、またはディスク上のCコードを含む一時ファイルが、コンパイラによって作成されます。コンパイラはさらに、Cコンパイラによってネイティブコードにコンパイルされますか?

+0

[Objective-Cはネイティブコードまたはバイトコードにコンパイルできますか?](http://stackoverflow.com/questions/172614/does-objective-c-compile-to-native-code-or-バイトコード) – Mark

+1

私は知っているので、バイトコードにJITとObj CコードをコンパイルしたVMはありません。 larsmans答えに対する私のコメントを読んでください。 –

+0

しかし、答えはコードがどのようにコンパイルされているかを伝える必要があります。 – Mark

答えて

8

Objective-C の構文は、C構文の拡張であり、独自のコンパイラを持つことができないことを意味しません。 C++は同じ方法です。その構文はCと互換性がありますが(ほとんどの場合、とにかく)、独自のツールセットがあります。 C、C++、およびObjective-C用のコンパイラは、前処理、構文解析、コード生成のためにお互いの部分を再利用できますが、それらを順番に実行する必要はありません(Objective-C ==> C ==> Targetコードなど)。コンパイラは、もはや人間が読めるアセンブリ言語を使用しなくなりました(これは非常に長い間もそうでした)。

4

いいえ、Objective-Cはアセンブラに直接コンパイルされます(GCCを想定)。

+0

しかし、Objective CのクラスがCの構造として実装される何らかの理由があるはずです。 –

+0

@AmoghTalpallikar:それはどういう意味ですか? –

+0

Appleのドキュメントを見ると、Objective Cのクラスのオブジェクトは基本的にいくつかのC構造のポインタです。たとえば、idは実際にはobjc_obj *のtypedefです。 この構造体には、それが属しているクラスとそれに関する他の情報を示すisaポインタがあります。 純粋なCコードにすべてがダウンしている場合、中間コードとして変換されますか?Cコードはディスクになければメモリ内にある可能性がありますか? –

関連する問題