読者です 読者をやめる 読者になる 読者になる

Pebble's Diary

プログラマーの作業メモ

Xcode5.1.1(2014-04-19時点最新)でメモリリークを調査する際のTIPSその2

InstrumentsのLeaksでメモリリークを調査する際のTIPSその2です。

Leaksで素早くメモリリークを調べて直すのにはコツが必要です。
SXXP細胞のアレと同じですね。
コツが分かっていないと無駄に時間を使ってしまいます。
そこでTIPSとしてまとめておきます。
なお、ここで挙げる項目は非ARCの場合の話です。

1) iPhone Simulatorで出力されるメモリリークは、本当のメモリリークとは限らない。
実デバイスでもリークしていたら本当のリークです。

2) strongプロパティにcopyして設定していないかチェックする。
  strongプロパティにセットする場合はcopyしていればautoreleaseしているはずです。

3) NSObject以外のクラスを継承していないことをチェックする。
NSString,NSData,NSURLRequestなど、基本的なクラスほど継承したら正しく動作しません。
NSObjectのクラスを継承するように変更しましょう。

4) deallocで全てのクラス変数をリリースしているかチェックしましょう。
また、リリースする順番は変数の宣言されている順番に直しましょう。

5) Leaksで示されたコードの周辺だけを見てもおかしな箇所が見当たらない場合は、
その変数の戻り値を使用している箇所を追いかけましょう。
また、その変数を保持しているクラスが解放されるタイミングを追いかけましょう。

6) 他の人が書いたソース部分を重点的に調べましょう。
自分で書いたソースは注意深く作っているはずです。

7) リークが発生するパターンを絞り込み、関連するソース箇所を絞り込みましょう。
例えば、ここを押して次にここを押したときだけ発生することが分かれば、
その時に動作する部分だけに調査を絞り込めます。

8) Blocks内でのクラス変数使用の自動retainに注意しましょう。