Objective-Cのメモリ管理をなかなか理解できない開発者も多い気がするので、メモリリークについて不安に思っている方も多いのではないでしょうか。
iPhoneで初めてプログラミングを始めた方もいるかもしれませんので、メモリリークについて簡単に説明すると、allocしたメモリ領域をrelease(dealloc)していないとか、確保したメモリがどこからも参照されない状態になって、ゴミが残っている状態の事です。
自分も理解するまで随分と悩みました。
まずはリークがあるかテストする所から始まります。
XCodeのメニューの「実行」→「パフォーマンスツールを使って開始」→「Leaks」を選択して、「Instruments」を起動しましょう。
以下のような画面でテストできます。
今回は「おみくじ」アプリでわざとメモリリークが出るように改変してみました。
このツールを使ったテストでは以下の2点に注意が必要です。
1)「Leaks」という行のオレンジ色の三角形が出るかどうか。
2)画面遷移ごとにallocやreleaseがあるアプリの場合、遷移を繰り返していくうちに、「ObjectAlloc」の行のメモリ使用量のグラフが増えて行かないか。
1)についてはallocしたものをretainしているにも関わらずreleaseできてないなど、保持と解放の数が合ってない場合に発生します。
2)については、1)が大丈夫でも発生するケースがありました。
繰り返し使っているうちにメモリ不足に陥って、メモリ不足のアラートイベントがアプリに通知されますが、実質管理できてないメモリの問題なので、なす術無く強制終了といった状態になります。
1)2)ともに大丈夫!という事であればそのままでOKですが、もしどちらかでおかしな点があれば、「Instruments」の下の段のメモリブロックの情報と、ソースコードから原因を探って行く事になります。
メモリ管理については、他の言語からiPhoneのObjective-Cに移ってきたプログラマが陥りそうな部分がありますが、この続きはまた今度。
※iPhoneアプリ開発に関する投稿を今から始めるiPhoneアプリ開発にまとめました。
最近のコメント