iPhone開発 メモリとデバッグとパフォーマンスツール

デバッグしてると時たま↓みたいなメッセージがでて、強制的にデバッグ終了させられる事がある
Program exited with status value:101.
これは、どうもメモリを確保できなくなった場合に起こるようだ。


iPhone / iPod touch には、仮想メモリ的なシステムも一応ある。(メモリを一時的にFLASH領域へ退避する感じの)

重たいアプリを使っていて急に動きが遅くなりだしたら、仮想メモリを使いだしてるので注意すべきである。(とりあえずセーブして終了して、メモリクリーンするとか)


(03-01:訂正 iPhoneではストレージへ退避する形の仮想メモリはないようだ。結局実メモリ仮想メモリとして仮に使用しているだけであって、あんまり意味が無い。)


そこをさらに超えると、アプリが強制終了してHOMEに戻される。運が悪いとそのままフリーズしたりする。(まぁ、この辺は他のデスクトップPC向けOSと変わらんね、ただメモリの絶対量が違うので、iPhoneだとおきやすい気がする。使い方次第だけど)


この辺、メモリ足りなくなると、他のプロセスにメモリ警告を送ってメモリ解放しなさいってやる機構があるんだけど、その辺で遅くなったり、バグがあるプロセスのおかげでおかしくなったりしてたみたい。


Xcodeにはパフォーマンスツールっていう強い見方がいるんで、これのActivityMonitorを使えば、メモリなどの情報をどれだけアプリが使ってるか逐一レポートしてくれる、ビバActiveMonitor!?(残メモリなど詳細に分かる)


内の開発環境のiPod touch 1Gだと再起動直後でも50MB強程度しか空きメモリはない。しかも、これは他プロセスなど使用されてるとがんがん減ってくので、実際はこんなに使用できないとして見積もるべきである。(とくにメールやサファリには注意)



あのアプリ、再起動しないと使えないよと言われたくなければ、10〜20MB程度に使用メモリを押さえた方が無難かも。


20MB超えた当たりから、他プロセスとの兼ね合いによっては怪しくなってくる気がするので、動かない場合は再起動〜〜のくだりを説明に書き加えた方が良いかもしれない。(この辺、厳密に調べたわけではないので微妙な所だが)


iPod touchのスペック等はこの辺を参照のこと
wikipedia:IPod_touch



[03/01追記]
さて、上はiPodTouch1G での話で iPhoneではさらに事態は深刻だ・・・。再起動直後のメモリが31MB程度しかない・・・。


メール、サファリで2〜3ページ開きっぱなしにすると、もう5MBも残らない・・・。こんな状況でまともにメモリ確保しようなんて無理ってもんである。(リアルメモリじゃなくInactiveなメモリなら10〜15MBくらいある)


iPhoneで再起動いらないアプリが作りたいなら、できれば5MB程度、多くても10MB以内にメモリを抑えるのが懸命なようだ・・・(しょぼ〜ん)


再起動直後なら、がんばって20MB前後位はとっても平気かな・・・?この辺、公式ドキュメント読むと24MBまでにしろ的な事書いてあったな・・・そういえば。(Inactiveも計算に入れるなら、その位までは取れはするはず)