1日30分英語

習慣化するために

P62-78 メソッド

メソッドとは何か

  • 3要素:メソッド、セレクタ、メソッドの実装
  • Method型
struct objc_method {
  SEL method_name;
  char *method_types;
  IMP method_imp
}
  • SEL型
    • Opaque構造体として隠蔽されている
    • コード上で生成したC言語の文字列をセレクタとして使う事はできない
    • セレクタはランタイムによって確保された特別な文字列
  • IMP型
    • 関数ポインタ
typedef id (*IMP)(id, SEL, ...);
  • あるクラスに対するすべてのメソッドリストの取得
    • struct objc_method_list* class_nextMethodList(Class classObject, void** iterator);
  • 引数の型のエンコーディング
  • セレクタ配列
  • ビルトインセレクタ
    • objc-sel-table.hでCocoaで使われるセレクタが宣言されている
  • IMPの取得
NSString* object;
SEL selector;
object = @"Objective-C";
selector = @selector(length);

Method method;
IMP imp;
method = class_getInstanceMethod([object class], selector);
imp = method->method_imp; 
  • メソッド実装の食説呼び出し
    • 動的特性がなくなるが高速化できる

メソッドについて。凄く丁寧に解説されていて面白い。
しかし、この辺あまり使わなくてすぐに忘れそうなのが怖い。

Dynamic Objective-C

Dynamic Objective-C