« RubyCocoa 今日のコミット | トップページ | メモ: RubyCocoa でのカテゴリやプロトコルのとりまわし »

2006.05.18

alloc/init まわりの修正の新しいパッチ

を読んだ。autorelease されてるオブジェクトは、RubyCocoa 的に ruby サイドのオーナーシップが必要だろうということで retain する、というもの。

今までの「ruby での参照が発生したら、 ruby 用の retain を必ず発生させる」というポリシーとは異なる。ruby 側に渡ってきたときに autorelease されてなくって、ruby で参照され続けている(たとえばインスタンス変数に代入とか)状態で Objective-C サイドよりも生存期間が長くなってしまうと、まだ ruby で使っているはずなのに解放されてしまうということが起きるように思う。自分の誤読だといいんだけど。

ただ、Objective-C の作法にしたがって作ってあるものならば、そういう状況は起こらないはず。外部に渡すオブジェクトは、autorelease するか copy するから。どうしてもマズければ、自分で retain すればよい。release もしないといけないけどね。

テストコ−ドを書いて走らせたら、ひとつ SEGV が起きるケースがあるのでそこは調べないといけない。

このパッチには、ほかにもセレクタの扱いとか、いくつかの改善がはいってる。そっちはとくに異存なし。

|

« RubyCocoa 今日のコミット | トップページ | メモ: RubyCocoa でのカテゴリやプロトコルのとりまわし »