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

В этом коротком руководстве мы узнаем, как произвести и точно идентифицировать утечку памяти, используя график отладочной памяти Xcode и инструмент утечек.

В примере приложения показаны два экрана. На первом экране нажмите кнопку, чтобы перейти ко второму экрану, где мы намеренно создаем утечку памяти, используя цикл сохранения.

Вот наш рабочий процесс:

  • Сначала мы открываем инструмент утечек Xcode и нажимаем кнопку записи
  • Когда приложение запускается автоматически, мы нажимаем кнопку навигации, которая представляет наш текущий контроллер представления.
  • Мы просто открываем его с помощью кнопки возврата элемента навигации.
  • Наконец, мы наблюдаем эффект в приборе утечек и графике памяти.

Исходный код доступен на GitHub.

Давайте начнем

Предположим, у нас есть простой подкласс UIViewController:

Все, что он делает, - это наш целевой контроллер представления утечки:

Чтобы создать цикл сохранения, у нас есть ViewComponent класс, который принимает UIViewController в качестве параметра:

В результате мы имеем следующие отношения:

LeakingViewControllerViewComponent

ViewComponentLeakingViewController

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

Диагностика утечки памяти

Теперь пора открыть инструмент утечек:

  • Выберите «Xcode» в верхнем левом углу экрана.
  • Разверните «Открыть инструмент разработчика» и выберите «Инструменты».
  • Теперь выберите «Утечки» и убедитесь, что вы выбрали целевое приложение и устройство вверху («Выберите шаблон профилирования для…»):

  • Наконец, нажмите кнопку записи

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

У нас есть следующий результат:

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

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

Заключение

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

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