Objective-C は C のスーパーセットであるため、Objective-C 固有のすべてのステートメントは、.m ファイルのコンパイル中に C ステートメントに変換されます (プリプロセッサによると思います)。したがって、たとえば、次のようなメッセージ式[receiver method]
は、メッセージ関数の呼び出しに変換されますobjc_msgSend(receiver, selector)
。
私の質問は: 次のようなクラス定義がある場合:
@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()
構造体を実行可能ファイルから)?