プログラマにとってはメモリリークは常に恐るべきものだ。
しかし、自分の書いたコードではないところで起こるとどうしようもないこともある。

今回はそんな理不尽な現象について調査してみる。
試した環境は以下になる

OS X Yosemite
Xcode6.1
 
新規作成したばかりのプロジェクトでメモリリークが起きることを確認する
まず何でも良いので、新規のSingleViewApplicationを作成する。
次に、どれか適当なシミュレータを選んでProfile → Leaksと実行する。

すると、以下のように5秒前後の段階でメモリリークが発生するのがわかる。
ios8_leak_ss1
まっさらなプロジェクトなのだから、私に責任がないことは明白だ。
他のシミュレータに変更して同じことを繰り返しても同様の現象が起きる。

※ちなみに、実機(iPod Touch5 iOS7.1.2)ではこの現象は起きなかった。

実機では起きず、シミュレータでのみ起きるということは、シミュレータのバグの可能性もあり、さほど気にしなくても良いのかもしれない。
しかし、このままではなんとも気持ち悪いので、色々と調べてみた。

シミュレータでメモリリークが起きないようにする方法
ググってみても情報は全く見つからなかった。
stackoverflowにすらそれらしい情報が無かったので、自分で色々と試していたところ、それらしい解決方法が判明した。

それは、
一度Runで実行してから、その後にLeaksで実行する
というものだ。

こうすることで、メモリリークが発生しなくなることを確認できた。

ちなみに、シミュレータを別のものに変更すると再度同じ現象が出ることがあるので、その場合もRunからやり直そう。

なお、シミュレータでiOS7.1の場合、この手順を行ってもこの現象は解決しない。
なので、今のところその場合は諦めるしかないだろう。

繰り返すが、実機で起きないのなら(全ての実機で試したわけではないが)特に問題は無いのだから。