Проблема с памятью может иметь несколько причин и не обязательно UIViewController.Чтобы найти и решить проблему, вы должны уменьшить масштаб проблемы с «приложения» до определенного экрана или даже класса.Затем вы можете проверить код и попытаться выяснить, где находится подозрительный код.
Решение этой проблемы не является простой задачей, и у вас нет учебника "Как исправить проблему с памятью для моего приложения", у вас будетчтобы проверить свой код и сравнить с потенциальными причинами утечек памяти.
Также вам следует быть осторожным в отношении ложных срабатываний утечек памяти.Вот некоторые шаги, которые я выполняю, когда я подозреваю проблему с памятью.
Перейдите через приложение «до конца», затем вернитесь к «домашнему экрану», если память падает, все хорошо.
Если память не падает, я выполняю одну и ту же навигацию несколько раз, если память увеличивается с одним и тем же шагом (более или менее, но близко), тогда возникает проблема.Если память не увеличивается (может быть, немного, несколько килобайт), тогда все в порядке, это означает, что в памяти кэшируются некоторые ресурсы (изображения, файлы и т. Д.).Но вам также понадобится способ протестировать этот сценарий.
Теперь мы вернулись к «увеличению памяти снова почти так же, как в первый раз», теперь я делаю пробный прогон и беру каждый экран за разЯ просто открываю экран, возвращаюсь (отклоняю / выскакиваю контроллер) и наблюдаю, если память падает, то это не экран, который протекает.Когда я нахожу экран, который увеличивает память и никогда не возвращается назад:
- проверяется, передается ли контроллер как ссылка на другие объекты, которые не будут освобождены (одиночные классы или другие, зависит отapp).
- проверить, отправляется ли контроллер в качестве «делегата» на какие-либо другие классы и правильно ли определены эти делегаты (сильные делегаты - проблема biiiiig).
- , если все вышеперечисленноевсе в порядке, тогда я просто прокомментирую весь код, который выполняет любую работу, и попробую еще раз.Если комментирование кода не приводит к потере памяти (это случается редко), то экран не является правильным.
- если память падает после комментирования кода, я начинаю комментировать биты кода и запускаюопять же, пока вы не найдете кусок кода, который создает вам проблемы.
Одна вещь, которую нужно иметь в виду, вы должны быть терпеливы при исследовании проблем с памятью, и, честно говоря, иногда у вас естьтоже повезло.