[Rubycocoa-devel 107] Re: Cocoa のサブクラスのサブクラスに関する変更

Back to archive index

FUJIMOTO Hisa fhisa****@users*****
Wed Oct 5 11:43:26 JST 2005


藤本です。

05/10/04 に kimura wataru<kimur****@i*****> さんは書きました:
> 以下の問題を修正してコミットしたので報告します。

どうもありがとうございます!

> sf.netのバグトラッキングにいつのまにかタレコミされていたものです。
> http://sourceforge.net/tracker/?func=detail&atid=438476&aid=1283390&group_id=44114
>
> (現象)
> ruby上でCocoaのサブクラスのサブクラスを定義し、そのインスタンスメソッド
> を呼ぶとクラッシュします。
>
> 例)
> ----
> class A < OSX::NSObject
> end
>
> class B < A
> end
>
> b = B.alloc.init # => CRASH!
> ----

これはずっと前から気づいていて、かつ解決方法がわからなかったので、「孫
クラスは作れない」みたいなことを FAQ あたりに書いたような気もします(未
確認)。

> (原因)
> OverrideMixin.mのsuper_imp()で取得したスーパークラス(例ではA)の
> メソッドrespondsToSelector:のIMPが、Bのメソッドど同一のアドレスに
> なるために、無限ループします。
>
> (対応)
> super_impの実装を変更し、RubyCocoaでオーバーライドしたメソッドは
> 無視して、クラス階層をたどるようにしました。
> -[B respondsToSelector:]をsuper_imp()で取得すると、今までは
> -[A respondsToSelector:]が返ってきていたのが、-[NSObject
> respondsToSelector:]を返すようになります。

すごい。ここらへんまでハックしてるんですね。
そろそろ書き直したい症候群を発症しそうになったりしませんか (笑
--
hisa



More information about the Rubycocoa-devel mailing list
Back to archive index