以下の関数を呼び出すことにより
メソッドのSELオブジェクトから、関数へのポインタを取得することができます。
// クラスメソッド、インスタンスメソッド兼用
- (IMP) methodForSelector: (SEL)aSelector
// インスタンスメソッド専用
- (IMP) instanceMethodForSelector: (SEL)aSelector
IMP型の定義は下記のような関数へのポインタのtypedefになっています。
// id:呼び出し元オブジェクト
// SEL:関数のセレクタ
// ...:引数リスト
typedef id (*IMP)(id, SEL, ... );
// [obj method: param1 p2:param2 ] 通常の呼び出し
//関数へのポインタ経由の関数呼び出し。
SEL selector = @selector(method:p2: ); // セレクタの取得
IMP pfunc = [obj methodForSelector : selector ]; // 関数へのポインタの取得
pfunc(obj , selector,param1,param2 ); // 呼び出し
関数へのポインタ経由の呼び出しは通常のメソッド呼び出しより高速ですが、
通常の呼び出しでも十分速いので、
これを気にするより先にアルゴリズムの見直しなどを行ったほうが良いです。
呼び出し方法別の呼び出し速度ランキング
関数へのポインタ経由の呼び出し >通常の呼び出し > selector経由の呼び出し (performSelector)