RubyCocoa で NSObject.alloc.init が NSObject を返さない問題
RubyCocoa で WebView を使うと NSObject.alloc.init が NSObject を返さないことがあったのでレポートしておいた。→ rubycocoa-devel:890
こんなコード
class AppController < OSX::NSObject include OSX def webView_decidePolicyForNavigationAction_request_frame_decisionListener( sender, action, request, frame, listener) listener.use end def awakeFromNib 3000.times do |i| obj = NSObject.alloc.init if obj.class.name != 'OSX::NSObject' puts "Not NSObject at: #{i}" p obj return end view = WebView.alloc.initWithFrame(NSZeroRect) view.setPolicyDelegate(self) view.mainFrame.loadHTMLString_baseURL('<html></html>', nil) end puts 'No problem' end end
を実行すると、
Not NSObject at: 104 #<OSX::WebPolicyDecisionListener:0x159ed6 class='NSObject' id=0x500e20>
となり、NSObject.alloc.init が NSObject 以外のオブジェクトを返していることがわかる。
どうやら Objective-C object id → ruby object の変換テーブルのキャッシュが悪さをしていたらしく、すぐに fix してくれた。→ rubycocoa-devel:893
hisaさん、Laurent、ありがとう。