Почему iOS завершает работу моего приложения, даже когда я освобождаю много памяти в ответ на предупреждения о памяти?

Я не могу понять, почему 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 завершает работу моего приложения, хотя я с радостью отвечаю на предупреждения о памяти освобождает тонну памяти?

8
задан Community 23 May 2017 в 12:03
поделиться