Help us understand the problem. What is going on with this article?

非ARC環境におけるObjective-Cのメモリリークチェック

More than 3 years have passed since last update.

今更、非ARC環境についてあまり考えても仕方ないのだが、そういうアプリもあるわけで。
メモリリークのチェックについて、いろいろ確認を。

Xcodeにおいてメモリリーク等のチェックに主に使うのはAnalayzeとInstruments(Leaks)

どちらも単純なメモリリークについては見つけてくれるのだが
allocした関数内で完結しない(retain増えるような別クラスに渡すとか)すると見つけてくれない(らしい)

そうなってくると難しいのがメモリリークしていないことの確認。
単純にInstrumentsのAllocations眺めてても結構変動するので
今回手を入れた個所がおかしいのか元々なのか
そもそも問題あるのかどうかすら、イマイチわからない。

なので、とりあえず、勉強がてらInstrumentsのAllocationsで見るべきポイントを絞ってみた。
・Statisticsの#Persistent
 これが確保されたままとなっている領域で、これが増え続けるようだとまずい。
・Allocation List
 そもそも怪しい領域の目星がついているのなら
 NSLog(@"%p", str)とかでアドレスをConsoleに出しておいて
 Allocation List検索して様子を探れる。
 メモリが確保された呼出し元の関数も検索対象にできるようで
 自作の関数が乗ってたりするケースもあり、便利。
 参照カウントの増減履歴なんかも見れたり。
・DetailにあるGeneration Analysis欄のMark Generation
 Markした時間のAllocationsで監視している内容を保持して
 次のMarkをしたときに前回からどれだけ#Persistentが増えたかとか出してくれるみたい。便利。
 Markした横の矢印で中に入ると前回から今回までの時間帯の情報に絞ってくれるので
 Allocation Listで対象絞ったりも多少楽かも。

公式のマニュアルにはMark Generation使い方として
同じ動作何回かしてみて増え続けないことを確認とあるのだが
UIAlertController表示を繰り返すだけでも増減0にならなかったり。
多少の変動は気にしなくていいのかも。

最後に触っててちょっと罠かなと思ったのが
・LeaksのAutomatic Snapshotting
 あまりに早いと解析しっぱなしになってしまって、メモリリーク解析されない。。
 デフォルトの10秒ぐらいで見ておけばいいっぽい。
・再生ボタンみたいなところからProfile起動する場合
 Buildし直したと見せかけて、シミュレーターのアプリは更新されていないらしい。
 普通に更新前のアプリが起動した。。

メモリリークは今後も調べたりありそうなので、もう少し詰めてみてもいいかもしれない。
Swiftで開発してもチェックはするのだろうし。
今回触れなかったけど、Trace Symbolとか便利そうだった。

とりあえず、Qiitaのお試し利用と、自分用メモ兼ねて。
そのうちまとめ直して画像付きとか凝ってみてもいいのかも。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away