きりかノート 3冊め

おあそびプログラミング

objc_alias_method ほか

ひ日誌の「RubyCocoaでPosingやMethod Swizzlingは可能?」に反応。

Posing

Posing は結構制約が多いし、Swizzling を利用すればサブクラスを利用する必要がほぼないと言える(個人的な経験では)ので、「使わない」という決断をすればよいかと。Ruby 側で定義したサブクラスでは、インスタンス変数が追加されているので Posing はうまく動作しないはず。

Method Swizzling

addRubyMethod: がほぼ同様のことをしているので、実装としては特に障害はないはず。以前に手元の環境で試験的に実装したことあるし。

  • Module#alias_method と同じように Module#objc_alias_method といったところ
  • Cocoa なクラスでは alias_method も再定義して、対象のメソッドが objc 側にもあるかどうかに応じて (オリジナルの)alias_method と objc_alias_method を呼び出す

という感じでどうだろう? 構文のほうの alias はどうしようもないか。数日中にはパッチを ML に投げるつもり。