Ответ сложный.
Приложение может находиться в различных состояниях:
Active
Inactive
Running in the background
Suspended
Not running
Во всех, но «не работает» состояние, приложение находится в памяти и ваши утечки памяти продолжают накапливаться.
Обычно, когда пользователь нажимает кнопку «домой», приложение быстро переходит через неактивное (все еще работает на переднем плане, но не взаимодействует с пользователем) на фоне (все еще работает, но другое приложение имеет фокус) и приостанавливается (в памяти, но не получая процессорного времени. В этом состоянии ваш код вообще не вызывается.) Вы получаете уведомление, когда приложение переходит в неактивное состояние и в фоновое состояние, прежде чем оно переходит в приостановленное состояние.
Ожидается сохранение любой информации, необходимой для сохранения в ответ на сообщение applicationDidEnterBackground.
Как только приложение находится в состоянии ожидания, оно может быть прекращено без дальнейшего предупреждения. Если вы не сохранили свою информацию в файл в этот момент, она потеряна.
Если приложение остается в приостановленном состоянии, а затем проснулось до одного из состояний запуска, все ваши объекты в памяти все еще вокруг, и ваши утечки памяти все еще накапливаются.
Как отмечает @blobbfuesch, утечка памяти заставляет ваше приложение использовать все больше и больше ОЗУ устройства. Если ваше использование памяти становится слишком большим, система выдаст вам одно или несколько предупреждений о памяти, и если вы не освободите достаточное количество памяти, оно прекратит вас.
Потому что утечка памяти потеряна, вы НЕ МОЖЕТЕ освободите ее. Даже небольшие утечки складываются. Если пользователь сохраняет вашу активность достаточно долго, они накапливаются и могут привести к прекращению действия вашего приложения, которое выглядит как сбой для пользователя.
Если приложение завершено во время приостановленного состояния, оно выгружается из памяти и должно быть перезапущено при следующем запуске. в этом случае предыдущая утечка памяти восстанавливается, но затем она снова начинает протекать.
Спасибо за ваш ответ. Насколько мне известно, небольшие утечки памяти, на которые я ссылался, случаются не очень часто, и я ничего не могу с ними поделать, поскольку они являются ошибками с Apple (WKWebview и UIAlertView). В данный момент я сосредоточен на поиске удерживающих циклов. Есть ли у вас предложения по поиску циклов сохранения? Я не думаю, что они показаны в Инструменте утечек. –
Я почти уверен, что инструмент «Утечки» имеет флаг сохранения циклов. Вы обнаружили другие утечки, о которых вы говорите в симуляторе или на устройстве? За эти годы я видел несколько случаев утечек памяти в системных рамках, которые появляются только в симуляторе. (Предположительно вызвано ошибками в моделируемой реализации системных фреймворков.) –
Я нашел другие утечки на устройстве. Когда я пытаюсь использовать инструменты на симуляторе, он сильно зависает/отстает от моего Mac-mini (я не уверен, почему), но он не отстает от моего устройства почти так же плохо –