Вопрос проверяет практические навыки отладки утечек памяти с помощью жизненного цикла объектов.
deinit используется как маркер корректного завершения жизненного цикла объекта. В него добавляют лог или breakpoint. Если deinit не вызывается, значит объект удерживается в памяти. Это простой и эффективный способ локальной диагностики.
При отладке утечек важно быстро понять, какие объекты «застряли» в памяти. deinit идеально подходит для этого.
В начале отладки:
добавляют deinit в подозрительные классы
логируют момент освобождения
Пример:
deinit {
print("ViewModel deinitialized")
}
После закрытия экрана:
deinit вызвался → утечки нет
deinit не вызвался → объект удерживается
Если deinit не вызывается:
открыть Memory Graph
найти объект в графе
посмотреть цепочку сильных ссылок
На практике deinit не вызывается из-за:
сильного захвата self в замыканиях
подписок RxSwift / Combine
делегатов без weak
deinit — первый и самый быстрый инструмент для поиска утечек памяти на уровне отдельных экранов и сервисов.