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

iPhoneアプリのメモリリーク

Objective-Cのメモリ管理をなかなか理解できない開発者も多い気がするので、メモリリークについて不安に思っている方も多いのではないでしょうか。

iPhoneで初めてプログラミングを始めた方もいるかもしれませんので、メモリリークについて簡単に説明すると、allocしたメモリ領域をrelease(dealloc)していないとか、確保したメモリがどこからも参照されない状態になって、ゴミが残っている状態の事です。

自分も理解するまで随分と悩みました。

まずはリークがあるかテストする所から始まります。

XCodeのメニューの「実行」→「パフォーマンスツールを使って開始」→「Leaks」を選択して、「Instruments」を起動しましょう。

以下のような画面でテストできます。

Instruments_Leaks.jpg

今回は「おみくじ」アプリでわざとメモリリークが出るように改変してみました。

このツールを使ったテストでは以下の2点に注意が必要です。


1)「Leaks」という行のオレンジ色の三角形が出るかどうか。

2)画面遷移ごとにallocやreleaseがあるアプリの場合、遷移を繰り返していくうちに、「ObjectAlloc」の行のメモリ使用量のグラフが増えて行かないか。

 

1)についてはallocしたものをretainしているにも関わらずreleaseできてないなど、保持と解放の数が合ってない場合に発生します。

2)については、1)が大丈夫でも発生するケースがありました。

繰り返し使っているうちにメモリ不足に陥って、メモリ不足のアラートイベントがアプリに通知されますが、実質管理できてないメモリの問題なので、なす術無く強制終了といった状態になります。

1)2)ともに大丈夫!という事であればそのままでOKですが、もしどちらかでおかしな点があれば、「Instruments」の下の段のメモリブロックの情報と、ソースコードから原因を探って行く事になります。

メモリ管理については、他の言語からiPhoneのObjective-Cに移ってきたプログラマが陥りそうな部分がありますが、この続きはまた今度。


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

 

Comments are closed.