忍者ブログ

佐崎司と愉快な仲間達

ゲーム、アニメ、CG、iOS開発など思いついたことを記事にしています。 管理人が3人いますので、記事にまとまりはないと思います。 iPhoneアプリのレビュー依頼も受け付けています。

iOSのメモリリーク原因(Instruments未検出)

わか

iOSのメモリリークに関して記載します。
Xcodeでは、Instrumentsを使用する事で大部分のメモリリークを検出できます。
今回はInstrumentsを使用しても検出できないメモリリークに関して記載します。

・addSubview
viewを追加する場合に、addSubviewを使用します。
当たり前ですが、追加する毎にview分のメモリを圧迫していきます。
viewを閉じればメモリは解放されますが、閉じる前にメモリリーク
が発生したり、そもそも閉じる仕様になっていない場合もあります。
removeFromSuperviewを使用することで、addSubviewしたviewを
削除できますので、適宜削除するようにしましょう。

・UImage:imageNamed:
imageNamedで読み込んだ画像はキャッシュされ続けます。
解放する方法はおそらくありません。
何回も使い回す画像以外は、使用しないようにしましょう。

・deallock
画面を閉じる際に、NSTimerをinvalidateしていないと参照され続けて
しまいdeallockが呼ばれない状況になります。結果、そのviewが残り続ける
ことで、メモリを圧迫します。
また、viewがdelegateとして参照されている場合もdeallockが呼ばれません。
参照先でdelegateにnil設定して、参照しないようにしておきましょう。
ARCを使用しているとdeallocがデフォルトで存在しないため、気づきにくいです。
ARCでは明示的にdeallocを追加して、きちんと解放されているか確認した方が良いです。

何か間違っていたら、コメントお願いします。

拍手[0回]

PR