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 に投げるつもり。