Я не могу понять, почему iOS закрывает мое приложение (iPad, iOS 4) из-за использования памяти, даже после того, как я освобождаю тонну памяти в ответ на предупреждения о нехватке памяти. Например, вот типичный сценарий завершения, в котором я часто регистрирую использование памяти - посмотрите на использование «приложения», первое значение КБ в каждой строке:
...
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)
Вы можете видеть увеличение использования памяти приложением, пока оно не получит предупреждение памяти. Тогда я правильно отвечаю на предупреждение о памяти и освобождаю кучу (250 МБ!) Памяти. В этот момент мое приложение закрывается, и iOS переходит на домашний экран iPad.
Журналы «Использование памяти» здесь отображаются с моей logMemoryUsage () функцией , которая основана на коде из этого ответа .
Для записи я использую SDWebImage для кэширования UIImages в памяти, но, как показано, он обрабатывает предупреждения памяти, опустошая свой кэш (довольно большой на данный момент). Я понимаю, что могу настроить кеширование SDWebImage, чтобы не заполнять всю доступную память, и просто ждать предупреждений о памяти, но напрашивается следующий вопрос ...
Почему iOS завершает работу моего приложения, хотя я отвечаю на предупреждения памяти, счастливо освобождая тонну памяти?