Вопрос проверяет умение анализировать retain cycle и пользоваться инструментами диагностики памяти.
Для определения удерживающего объекта используют Memory Graph Debugger. Он показывает цепочку сильных ссылок между объектами. Также помогает анализ замыканий и свойств с типом ссылки. Без инструментов это сделать сложно и ненадежно.
Когда объект не освобождается, ключевая задача — понять, кто именно его удерживает.
Определение:
Memory Graph — это инструмент Xcode, который визуально показывает объекты в памяти и связи между ними.
Алгоритм работы:
запустить приложение в Debug
открыть Memory Graph
найти нужный объект
посмотреть входящие strong-ссылки
Параллельно с инструментами важно проверить:
свойства без weak
замыкания с захватом self
делегаты и dataSource
singleton-объекты
Пример проблемного замыкания:
service.load {
self.handleResult()
}
Исправление:
service.load { [weak self] in
self?.handleResult()
}
Без понимания цепочек ссылок:
утечки сложно исправлять
баги появляются со временем
растет потребление памяти
Memory Graph в сочетании с анализом ссылок в коде — основной способ понять, какой объект удерживает другой в памяти.