メモリ不足の警告に応答して大量のメモリを解放した後でも、メモリ使用量が原因で iOS がアプリ (iPad、iOS 4) を終了する理由がわかりません。たとえば、これは典型的な終了シナリオで、頻繁にメモリ使用量を記録しています。各行の最初の KB 値である「アプリ」の使用量を見てください。
...
2011-12-14 13:25:42.343 Oyster[211:707] Memory usage (KB): app 268256, delta 6472, used 366800/373940
2011-12-14 13:25:43.292 Oyster[211:707] Memory usage (KB): app 273900, delta 5644, used 372444/381024
2011-12-14 13:25:44.159 Oyster[211:707] Memory usage (KB): app 282920, delta 9020, used 381464/389116
2011-12-14 13:25:45.184 Oyster[211:707] Memory usage (KB): app 272140, delta -10780, used 370684/379432
2011-12-14 13:25:46.109 Oyster[211:707] Memory usage (KB): app 260412, delta -11728, used 358956/365900
2011-12-14 13:25:48.443 Oyster[211:707] Received memory warning. Level=2
2011-12-14 13:25:48.454 Oyster[211:707] Memory usage (KB): app 9172, delta -251240, used 107716/112548
(gdb)
メモリ警告が表示されるまで、アプリのメモリ使用量が増加していることがわかります。次に、メモリの警告に正しく応答し、大量のメモリ (250MB!) を解放します。その時点で私のアプリは終了し、iOS は iPad のホーム画面に移動します。
ここの「メモリ使用量」ログは、この回答のコードに基づくlogMemoryUsage() 関数で表示されます。
記録のために、SDWebImage を使用してUIImageをメモリにキャッシュしていますが、示されているように、キャッシュを空にすることでメモリ警告を処理します (この時点ではかなり大きい)。SDWebImage のキャッシングを微調整して、使用可能なメモリをすべて使用しないようにし、メモリの警告を待つだけでよいことはわかっていますが、それには次のような疑問が生じます...
大量のメモリを喜んで解放してメモリ警告に応答しているのに、iOS がアプリを終了させるのはなぜですか?