7

基本的なオブジェクト指向のANSICランタイムを実装し、Objective-Cをガイドとして使用しようとしています。

それらは3つの部分のようです。クラスの説明、クラスインターフェイス、およびクラスの実装。クラスインターフェイスをインスタンス化するために、Classオブジェクトを使用してオブジェクトをインスタンス化するおなじみの方法は、ランタイムがクラスの説明を使用してクラスオブジェクトをすでにインスタンス化した場合にのみ発生します。

では、すべてのクラス定義は、Classオブジェクトを使用してインスタンス化する機能を提供するために、最初の実行時に静的に割り当てられますか?または、それらが動的に(最初の呼び出しで)割り当てられる場合、どのように?それは実行ループの一部ですか、それともクラスは実際にメッセージを転送する前にすでに割り当てられているかどうかを判断する関数ですか?

4

1 に答える 1

5

ランタイムは、実際のプログラム実行の前に呼び出されるコンストラクター関数を介して初期化を行います。彼らは__attribute__((constructor))gccとclangの両方で通り過ぎます。

Objective-Cの場合、それらのいくつかはコンパイラによってバイナリに埋め込まれます。同様の効果を得るには、ヘッダーにそれらを含める必要があります。

これらの関数は、コンパイラによって自動的に埋め込まれたデータを使用します。それらは、実際のメッセージパッシングに使用されるクラスルックアップ関数のハッシュテーブルを構築するなどのことを行います。

一方、インスタンスは動的に割り当てられます。

私は似たようなことをしているので、それ以上のことはよくわかりませんが、これは私が掘ったのと同じくらい深いです。

于 2010-02-08T04:42:30.427 に答える