今更、非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のお試し利用と、自分用メモ兼ねて。
そのうちまとめ直して画像付きとか凝ってみてもいいのかも。