記事一覧

オブジェクトの保持

オブジェクトを保持するためには、オブジェクトに retain を送る。そのためには
[anObject retain];
などとする。これはいいとして、では、具体的に retain カウントを持っているのは誰か? といえば、それは anObject ではなく、あくまで 0x33994b2c とかいうアドレスで「メモリ上に格納されているそれ」である。
anObject は単なるポインタであって、「それ」と通信する窓口にすぎない。窓口は複数あっても良いから、anotherObject という別の窓口から retain やら release を送ってもよい。

・・・こんな話は Objective-C の入門書に書いてあることをよく噛みしめて読めば分かることなのだけど、始めた当初はどうにもこの仕組みを把握しにくかった。

で、最近思うに、その理由は「『それ』はメモリ上の『それ』であって、あくまで名前は無い」ということをハッキリ意識できていなかったからではないか、と。
静的な変数では、「名前」と「それに対応するメモリ上のデータ」を別個に意識する必要はないわけで、そのイメージが当初はなかなか拭えなかったのかもしれない。