読者です 読者をやめる 読者になる 読者になる

次のバージョンについて

SysStats LITE iPhone技術情報 iPhone開発一般



追記

この記事は、過去に、「メモリ解放機能」の追加を試みたときの記録となっています。
最終的にAppleの審査が通らなかったため、結果として実装を中止しました。
今後も、何か正規の認められた方法で類似の機能を実現できるようにならない限り、このアプリに「メモリ解放機能」と呼ばれる機能を追加する予定はありませんので、ご了承ください。
関連情報については、以下の記事をご参照ください。

SysStats Lite1.1が、本日リリースされます。 - The iPhone Development Playground
アプリ審査基準のグレーゾーン - The iPhone Development Playground
Malloc Simulatorはリジェクトされました。 - The iPhone Development Playground
iPhoneアプリは、そんなに自由に作れない - The iPhone Development Playground

よろしくお願いいたします。


ようやく、次バージョンの実装が完了したので、その内容を簡単にまとめてみました。主な変更点は、以下の通りです。
ちなみに、今回も機能優先で、デザインには手つかずになってしまいました。

  • メモリ解放機能を追加しました。
    • AppStoreで、Safariを終了させる機能やメモリ解放機能を追加してほしいというコメントを、多くいただいています。前回のiPhoneのSafariがいつのまにか終了する条件 - The iPhone Development Playgroundでも書いた通り、現時点では納得ができる実装にはなっていませんが、とりあえず、空きメモリを増やすことはできるようになっています。結局、最大で30MBのメモリを確保することでメモリ不足状態を引き起すという方法で実装しました。
  • メモリ使用状況に、物理メモリサイズとの相対比で表示される円グラフを追加しました。
  • メイン画面にシステム起動日時の表示を追加しました。
    • これは、情報の取り方がわかったので、とりあえず追加しました。

メモリ解放機能の実行結果

次バージョンのメモリ使用状況に関する画面の抜粋を示します。ちょっと細かい話になりますが、興味がある方は、この「謎解き」にお付合いください。

まずは、メモリ解放機能実行前の表示です。SafariiPodを起動している状態なので、かなり空きメモリは少なくなっています。

下の小さめの円グラフは、現状(ver.1.0.1)と同じものです。
上の大きめの円グラフは、次バージョンで追加されるものです。
これを見ると、およそ半分が、灰色の「測定できない領域」であることがわかります。
「測定できない領域」は、メモリ使用量の内訳が測定できない部分を、表現しています。現行バージョンでは、「物理メモリサイズ」と、「合計」の差分にあたる部分です。私は以前からこの部分に着目していたのですが、こちらの円グラフを追加したことで、さらに、メモリの状態を把握しやすくなったと思います。

次に、メモリ解放機能実行後の表示を見てください。

この処理の実行によって、空きメモリサイズは、3.4MBから36.4MBと、33MBも増えました。では、このほかに変化した場所を見ると。。。

  • 固定中: 34.7MB → 31.4MB(3.3MB減)
  • 現在使用中: 13.2MB → 5.8MB(7.4MB減)
  • 現在非使用中: 6.4MB → 2.3MB(4.1MB減)

というように、これらの領域の中の、14.8MBが空きメモリになったことがわかりますが、空きメモリの増加は33MBのはずです。残りはどうしたのでしょうか?
もう一つ変化した場所がありますね。

  • 測定できない領域: 58.3MB → 40.2MB(18.1MB減)

ここまでのすべての減少分を合計すると、33MB(0.1MB合わないのは、丸め誤差)になります。これらのことから、空きメモリの増加に最も寄与しているのは、「測定できない領域」の減少分であることがわかります。
下のグラフだけを見ると、約半分が空きメモリになったかのように錯覚しますが、実はそうではないことも見えてきます。(分母が異なる円グラフの単純比較はできないですし。。。)
あと、もう一つ忘れてはならないのは、Safariの状態です。

22:27:44 unknown SpringBoard[1630] : Memory level is urgent (10%). Asking 'Safari' to quit.
22:27:44 unknown MobileSafari[1714] : Safari got memory level urgent while suspended, self-terminating

このパターンでは、Safariは終了させられています。それによって、「測定できない領域」の一部が解放されたようです。
iPodが起動されていない場合など、実行前の空きメモリがここまで少なくなっていなければ、Safariの終了にまで至らないこともあります。そのときには「測定できない領域」に、ほとんど変化はありません。これによって、Safariは、「測定できない領域」の中のメモリを多く消費している考えられます。
なので、このアプリのユーザのみなさまには、次バージョン以降は、新しい方の円グラフを見て、「測定できない領域」の部分にも注意していただければと思います。
それと、SysStats LiteがSafariを終了させているのではなく、かなりきついメモリ不足状態を作った結果、SpringBoardによって終了させられているのだということをご理解ください。

次バージョンは、Appleに提出済ですので、早ければ、来週にでもリリースされると思います。
もうしばらくお待ちください。