kimura wataru
kimur****@i*****
Sun Sep 11 20:10:37 JST 2005
木村です。 >ふじもとです。 > >何を考えて作ったのかほとんど忘れちゃってるので、確認して思い出してから >返信しようかと思ってたんですが、それだといつまでたっても返事できそうに >ない(汗) > あー、すみません。事後報告にしようとも思ったのですが、けっこうコアな 部分だと思ったので、ポストしました。 >ということで、今の時点での気になった点についてコメントします。 > > >"Object Ownership and Disposal"というドキュメント(URL長すぎ): > > http://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/index.html#//apple_ref/doc/uid/10000011i > >に: > > If you directly allocate, copy, or retain an object, you are > responsible for releasing the newly created object with release or > autorelease. Any other time you receive an object, you are not > responsible for releasing it. > >とあって、これを真に受けると、ownership が発生するのは >alloc,copy,retain したときであって、init は関係ないようにとれますよね。 >この記述と矛盾してしまうのがやや気になります。となると RubyCocoa のど >こかにバグがあるのかなという気もします。 > NSObjectとNSStringについてしか調べていないのですが、NSObjectでは alloc時にretainCountが1となっているのですが、NSStringでは-1となり init後に1となっているようです。 今調べていてわかったのですが、NSStringが特殊なようです。 http://homepage.mac.com/mkino2/spec/optimize/allocation.html これの影響で、NSStringについては 「alloc時にオーナーシップは発生しているが、 オーナーシップの放棄(release)はinitするまで無視される」 という現象が発生しているようです。 allocとinitXXXを同時に行うのはイディオムのようなものですから、 releaseをinit時まで遅らせても問題ないかなあと考えています。 >などと考えたのですが、木村さんは実際の Cocoa も RubyCocoa の挙動も良く >知ってらっしゃるはずなので、その上での提案ととらえています。さらに今の >時点で、僕に何かアイディアがあるわけでもないのですし、基本的には木村さ >んのアイディアで進めてもらえると助かります。 > そうします。ありがとうございました。 -- kimura wataru <mailto:kimur****@i*****>