Инструмент утечек может стать вашим лучшим другом при возникновении проблем с памятью

В этом коротком руководстве мы узнаем, как произвести и точно идентифицировать утечку памяти, используя график отладочной памяти Xcode и инструмент утечек.
В примере приложения показаны два экрана. На первом экране нажмите кнопку, чтобы перейти ко второму экрану, где мы намеренно создаем утечку памяти, используя цикл сохранения.
Вот наш рабочий процесс:
- Сначала мы открываем инструмент утечек Xcode и нажимаем кнопку записи
- Когда приложение запускается автоматически, мы нажимаем кнопку навигации, которая представляет наш текущий контроллер представления.
- Мы просто открываем его с помощью кнопки возврата элемента навигации.
- Наконец, мы наблюдаем эффект в приборе утечек и графике памяти.
Исходный код доступен на GitHub.
Давайте начнем
Предположим, у нас есть простой подкласс UIViewController:
Все, что он делает, - это наш целевой контроллер представления утечки:
Чтобы создать цикл сохранения, у нас есть ViewComponent класс, который принимает UIViewController в качестве параметра:
В результате мы имеем следующие отношения:
LeakingViewController ➼ViewComponent
ViewComponent ➼LeakingViewController
Чтобы объект был освобожден из памяти, никакой другой объект не должен указывать на него или удерживать его, что, конечно, не то, что происходит в нашем примере.
Диагностика утечки памяти
Теперь пора открыть инструмент утечек:
- Выберите «Xcode» в верхнем левом углу экрана.
- Разверните «Открыть инструмент разработчика» и выберите «Инструменты».
- Теперь выберите «Утечки» и убедитесь, что вы выбрали целевое приложение и устройство вверху («Выберите шаблон профилирования для…»):

- Наконец, нажмите кнопку записи
Теперь наше приложение запускается, и все, что нам нужно сделать, это нажать кнопку навигации, а затем кнопку возврата на LeakingViewController.
У нас есть следующий результат:

Красный значок означает, что где-то произошла утечка памяти. Чтобы увидеть фактически невыделенные объекты, мы воспользуемся инструментом графа памяти Xcode:

Мы видим, что даже несмотря на то, что мы представили и отклонили LeakingViewController, он все еще присутствует на графике памяти вместе с ViewComponent:

Заключение
Функция утечек Xcode - очень удобный инструмент. Мы можем просто нажать на кнопку записи, перемещаться и выполнять действия в большом приложении, и инструмент будет задокументировать новые утечки в отчете. У нас также есть способ сохранить запись и просмотреть ее в будущем:

Большое спасибо за чтение!