メソッド

メソッドはMethod型で定義され,ランタイムAPIを以下のように追いかけていくと,

@objc-class.h

typedef struct class-method *Method

同じく@objc-class.h

struct class-method {
    SEL method_name;
    char *method_types;
    IMP method_imp;
}

となってて,

  • メソッド名(セレクタ)を表すSEL型の変数
  • メソッドへの引数を表すchar型の変数
  • メソッドの実装部分へのポインタを表すIMP型の変数

で構成される構造体にたどり着く.

メソッドの実装

メソッドの実装は実際の実装部分へのポインタで表現されてて,IMP型の変数になってる.
IMP型はobjc.hで,

typedef id (*IMP)(id, SEL, ...);

と定義される関数ポインタ.
可変長引数で,id型の第一引数,SEL型の第二引数をとり,id型の返り値を返す.