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

Back to archive index

kimura wataru kimur****@i*****
Tue Oct 4 23:11:46 JST 2005


 木村です。

 以下の問題を修正してコミットしたので報告します。
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!
----

(原因)
OverrideMixin.mのsuper_imp()で取得したスーパークラス(例ではA)の
メソッドrespondsToSelector:のIMPが、Bのメソッドど同一のアドレスに
なるために、無限ループします。

(対応)
super_impの実装を変更し、RubyCocoaでオーバーライドしたメソッドは
無視して、クラス階層をたどるようにしました。
-[B respondsToSelector:]をsuper_imp()で取得すると、今までは
-[A respondsToSelector:]が返ってきていたのが、-[NSObject 
respondsToSelector:]を返すようになります。



-- 
kimura wataru



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