[Rubycocoa-devel 102] Re: alloc.init 時のオーナーシップ

Zurück zum Archiv-Index

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*****>



More information about the Rubycocoa-devel mailing list
Zurück zum Archiv-Index