Objective-Cは基本的にCの拡張版なので、コードをネイティブコードにコンパイルする前に純粋なCコードに変換しますか?すべてのObjective CプログラムはCコードに変換されますか?
もしそうなら、RAM上で変換が行われるか、またはディスク上のCコードを含む一時ファイルが、コンパイラによって作成されます。コンパイラはさらに、Cコンパイラによってネイティブコードにコンパイルされますか?
Objective-Cは基本的にCの拡張版なので、コードをネイティブコードにコンパイルする前に純粋なCコードに変換しますか?すべてのObjective CプログラムはCコードに変換されますか?
もしそうなら、RAM上で変換が行われるか、またはディスク上のCコードを含む一時ファイルが、コンパイラによって作成されます。コンパイラはさらに、Cコンパイラによってネイティブコードにコンパイルされますか?
Objective-C の構文は、C構文の拡張であり、独自のコンパイラを持つことができないことを意味しません。 C++は同じ方法です。その構文はCと互換性がありますが(ほとんどの場合、とにかく)、独自のツールセットがあります。 C、C++、およびObjective-C用のコンパイラは、前処理、構文解析、コード生成のためにお互いの部分を再利用できますが、それらを順番に実行する必要はありません(Objective-C ==> C ==> Targetコードなど)。コンパイラは、もはや人間が読めるアセンブリ言語を使用しなくなりました(これは非常に長い間もそうでした)。
いいえ、Objective-Cはアセンブラに直接コンパイルされます(GCCを想定)。
しかし、Objective CのクラスがCの構造として実装される何らかの理由があるはずです。 –
@AmoghTalpallikar:それはどういう意味ですか? –
Appleのドキュメントを見ると、Objective Cのクラスのオブジェクトは基本的にいくつかのC構造のポインタです。たとえば、idは実際にはobjc_obj *のtypedefです。 この構造体には、それが属しているクラスとそれに関する他の情報を示すisaポインタがあります。 純粋なCコードにすべてがダウンしている場合、中間コードとして変換されますか?Cコードはディスクになければメモリ内にある可能性がありますか? –
[Objective-Cはネイティブコードまたはバイトコードにコンパイルできますか?](http://stackoverflow.com/questions/172614/does-objective-c-compile-to-native-code-or-バイトコード) – Mark
私は知っているので、バイトコードにJITとObj CコードをコンパイルしたVMはありません。 larsmans答えに対する私のコメントを読んでください。 –
しかし、答えはコードがどのようにコンパイルされているかを伝える必要があります。 – Mark