プログラマにとってはメモリリークは常に恐るべきものだ。
しかし、自分の書いたコードではないところで起こるとどうしようもないこともある。
今回はそんな理不尽な現象について調査してみる。
試した環境は以下になる
OS X Yosemite
Xcode6.1
しかし、自分の書いたコードではないところで起こるとどうしようもないこともある。
今回はそんな理不尽な現象について調査してみる。
試した環境は以下になる
OS X Yosemite
Xcode6.1
新規作成したばかりのプロジェクトでメモリリークが起きることを確認する
まず何でも良いので、新規のSingleViewApplicationを作成する。
次に、どれか適当なシミュレータを選んでProfile → Leaksと実行する。
すると、以下のように5秒前後の段階でメモリリークが発生するのがわかる。

まっさらなプロジェクトなのだから、私に責任がないことは明白だ。
他のシミュレータに変更して同じことを繰り返しても同様の現象が起きる。
※ちなみに、実機(iPod Touch5 iOS7.1.2)ではこの現象は起きなかった。
実機では起きず、シミュレータでのみ起きるということは、シミュレータのバグの可能性もあり、さほど気にしなくても良いのかもしれない。
しかし、このままではなんとも気持ち悪いので、色々と調べてみた。
シミュレータでメモリリークが起きないようにする方法
ググってみても情報は全く見つからなかった。
stackoverflowにすらそれらしい情報が無かったので、自分で色々と試していたところ、それらしい解決方法が判明した。
それは、
一度Runで実行してから、その後にLeaksで実行する
というものだ。
こうすることで、メモリリークが発生しなくなることを確認できた。
ちなみに、シミュレータを別のものに変更すると再度同じ現象が出ることがあるので、その場合もRunからやり直そう。
なお、シミュレータでiOS7.1の場合、この手順を行ってもこの現象は解決しない。
なので、今のところその場合は諦めるしかないだろう。
繰り返すが、実機で起きないのなら(全ての実機で試したわけではないが)特に問題は無いのだから。
まず何でも良いので、新規のSingleViewApplicationを作成する。
次に、どれか適当なシミュレータを選んでProfile → Leaksと実行する。
すると、以下のように5秒前後の段階でメモリリークが発生するのがわかる。

まっさらなプロジェクトなのだから、私に責任がないことは明白だ。
他のシミュレータに変更して同じことを繰り返しても同様の現象が起きる。
※ちなみに、実機(iPod Touch5 iOS7.1.2)ではこの現象は起きなかった。
実機では起きず、シミュレータでのみ起きるということは、シミュレータのバグの可能性もあり、さほど気にしなくても良いのかもしれない。
しかし、このままではなんとも気持ち悪いので、色々と調べてみた。
シミュレータでメモリリークが起きないようにする方法
ググってみても情報は全く見つからなかった。
stackoverflowにすらそれらしい情報が無かったので、自分で色々と試していたところ、それらしい解決方法が判明した。
それは、
一度Runで実行してから、その後にLeaksで実行する
というものだ。
こうすることで、メモリリークが発生しなくなることを確認できた。
ちなみに、シミュレータを別のものに変更すると再度同じ現象が出ることがあるので、その場合もRunからやり直そう。
なお、シミュレータでiOS7.1の場合、この手順を行ってもこの現象は解決しない。
なので、今のところその場合は諦めるしかないだろう。
繰り返すが、実機で起きないのなら(全ての実機で試したわけではないが)特に問題は無いのだから。
コメント