Objective-C Method Swizzling

意外と使わない Method Swizzling の話です。
Debug かちょっと複雑な事をしない限り滅多に使う必要がなく毎回先生にお世話になるので使い方をメモしておきます。

とりあえず僕なりの最小コード

とりあえずこれだけで addSubview: を自分で作成した myAddSubview: に置き換える事ができます。

でも、大抵の場合 myAddSubview: 内で元の addSubview: を呼び出したい(オーバーライド的な動きをさせたい)となると思うので実際にはこんな感じになるかと思います。

IMPHolder は名前の通り IMP を入れる為だけにあるオブジェクトです。
NSMutableDictionary に入れるのに楽なので作りました。
サンプルの処理としては

1. viewDidLoad で addSubview: を myAddSubview: に置き換え
2. 元の addSubview: のポインタは _IMPDictionary に保存
3. myAddSubview 内で _IMPDictionary から addSubview: を呼び出す

というとても単純な仕組みです。
あとは @”addSubview:” としている所を

– 配列
– NSString *const
– #define

とかにすればもっと便利になるかと思います。
普段 Method Swizzling しないという方はちょっと使ってみると意外と便利で面白いですよ!
何でも出来過ぎて不安になりますが。。。

スポンサーリンク
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。