メモリ管理#01

 プログラムでかなり重要なのがメモリ管理。なのですが、初心者にはかなり難しいです...というよりはちゃんと理解してないだけですが。何か間違っていたら容赦なく突っ込んでくれますと大変勉強になります。内容はヒレガス本の4章になります。


 まずはメモリ割り当て。

id hoge = [[Foo alloc] init];

このようにするとallocでメモリ割り当て、initで初期化。


 保持とか。

[hoge retain];

これをやると、releaseとかautoreleaseが来ても阻止するらしい。


 解放

[hoge release];
[hoge autorelease];

上のどちらか。releaseは明示的に解放させ、autoreleaseは必要なくなったら勝手にreleaseする感じかな?まだよく分かってません...。


 でもって調べてると結構出てくる書き方が

Class *hoge = [[[foo alloc] init] autorelease];
[hoge bar];

これの1行目のような物。最初に書いた割り当てに解放を書いた感じになってます。
 たぶん、[hoge bar]が実行された後にhogeが解放されるのではないかと。(スコープから抜けたとき?)


 とりあえずこれくらいでしょうか?後はinitに引数を持たせたバージョンとかありますが、まだ存在意義が分からないので軽く無視の方向で...。