Objective-CはCのスーパーセットであるため、Objective-C固有のすべてのステートメントは.mファイルのコンパイル時にCステートメントに変換されます。プリプロセッサ、私は推測する)。たとえば、[receiver method]
のようなメッセージ式は、メッセージング関数objc_msgSend(receiver, selector)
の呼び出しに変換されます。Objective-C 2.0クラスのインタフェースと実装はGCCまたはClangによって変換される
私の質問は:私はこのようなクラス定義を持っている場合:
@interface ClassA {
int var1;
float var2;
id var3;
}
-(void) method1;
-(int) method2: (int) num1;
@end
@implementation ClassA
-(void) method1 {
// Implementation of the method
}
-(int) method2: (int) num1 {
// Implementation of the method
}
@end
それは(のObjective-Cの2.0バージョンで)コンパイラによって変換されたもの? objc_allocateClassPair()
、class_addIvar()
、class_addMethod()
、objc_registerClassPair()
のような関数の呼び出しに変換されて、クラスを作成し、そのインスタンス変数を追加し、そのメソッドを追加してクラスを登録します(クラス構造体は実際には実行可能ファイルから構造体としてロードされていますか?)