2008年12月
« 11月   1月 »
1234567
891011121314
15161718192021
22232425262728
293031  
2008/12/29

iPhoneアプリのメモリ管理 その1

以前iPhoneアプリのメモリリークというタイトルで投稿しましたが、今回はリークしない為のメモリ管理についてです。

Objective-Cのメモリ管理は、Javaともちょっと違い、C言語ともちょっと違う感じなので、戸惑う事も多いかと思います。

Objective-Cではメモリ領域を参照している数(リファレンスカウンタ)で、メモリを使用しているかを判断して、リファレンスカウンタがゼロになった時に解放します。

参照して使う時は「retain」メッセージを、不要になった場合は「release」メッセージを送って、リファレンスカウンタの数を変更します。

ここまではすぐに分かりそうですが、以下のようなコードを見たときに少し混乱しました。

例えば、SomethingViewをnewして、サブビュートして追加する場合、

SomethingView *view = [[SomethingView alloc] initWithFrame:~];
[self addSubview:view];
[view release];

Appleのサンプルコードは、以上のようなコードになっている事が多く、releaseしてもSomethingViewが表示されるというのが違和感が有りました。

リファレンスカウンタ方式の管理が分かってしまえば、上記のコードで何をしているかも簡単に分かります。

上記のコードの場合は、addSubviewの中でretainしていて、呼び出し元でreleaseしても、参照が残っている為、viewが解放されません。

自分が書いたコードで、alloc/retainとreleaseの数が合っていれば基本問題ないのですが、いくつかはまった点がありました。

その辺りを次回書きたいと思います。


※iPhoneアプリ開発に関する投稿を今から始めるiPhoneアプリ開発にまとめました。

 

Comments are closed.