iPhoneの空きメモリを少なくする方法

久しぶりの投稿です。
過去に何度か、空きメモリ不足に関する説明をしていますが、今回はちょっと切り口を変えてみました。

タイトルにあるように、わざわざ「空きメモリを少なくする」ということは、普通はやらないというか、望まれないことですが、アプリ開発時には必要な場面があります。
開発中のアプリが、空きメモリが少ない状態で、どのような振る舞いをするのかを確認したいようなケースがそれに該当します。

SDKに付属のiPhoneシミュレータでも、「メモリ警告をシミュレート」という機能はありますが、それは、あくまでも空きメモリ不足になったときにアプリに通知される警告が疑似的に出されるだけであり、本当の空きメモリ不足状態とは異なります。

空きメモリを少なくする

以下のことをやれば、見事に空きメモリを少なくすることができます。

  • Safariで8個のViewすべてに、Webページを表示させる。
  • メールでHTMLのメッセージをいくつか開いてみる。
  • iPodでカバーフローを表示し、端から端までスクロールさせる。

その状態で、SysStats Liteでメモリの状況を見ると、以下のような状態になっていることが確認できます。

これで、空きメモリが少ない状態でのテストを、実機で行うことができると思います。

さらに、ここからは、以下のようなことがわかります。

  • メモリを占有しているのは、紫色で示されている「その他」の領域であり、赤の「現在使用中」には、ほとんど変化がない。
  • 長時間使っているから空きメモリが少なくなるのではなく、使い方の影響が大きい。

しばらく使っていると、OSのメモリリークなどで空きメモリが不足するみたいな誤解も多いですが、iPhoneOSは、そんなにショボくないと思います。

空きメモリが少ないときの挙動

特にマニュアルなどには明記されていませんが、いろいろ試してみたところでは、以下のような挙動になるようです。

空きメモリが少なくなると、OSからメモリ警告のメッセージが送られるのは、開発者の方なら、ご存知のことと思います。その警告を受けたら、アプリは確保しておくことが必須でないメモリ領域を解放することが義務づけられています。
それでも空きメモリが不足したままであれば、Safariやメールなどの常駐アプリに、終了指示が出され、それでも間に合わないときは、強制終了されます。
まだ、だめだという場合は、フォアグラウンドで動いているアプリが強制終了されます。
私が見る限りでは、メモリ不足でアプリが落ちるのは、急速に大きなメモリを確保しようとして、上記のような状況になったときだと思われます。当然その後は、充分な空きメモリができている状態になります(笑)。

空きメモリ復活の方法(余談)

iPhoneは、空きメモリが少ないからといって、必ずしも不調になるわけではないですが、どうしても空きメモリが少ないと落ち着かない方が多いようですね(笑)。
その場合は、標準のカメラアプリで写真を1枚撮ってみてください。見事に空きメモリが復活します。例えば、以下のような感じです。

でもまた、Safariやメールを使っているうちに、空きメモリはすぐに少なくなってきますので、それがいやだという場合は、Safari、メールなどの標準アプリを使わないようにするしか手はないと思います(苦笑)。

尚、これらは、iPhoneOS3.1.3で、実際に試したみた結果であり、iOS4では、このあたりの挙動は変わる可能性がありますので、ご注意ください。

以上、お役に立てば幸いです。