> Что такое утечки памяти и когда они гарантированно возникают? (iOS, Swift)
Уровень: junior · Роль: mobile · Категория: Технические вопросы
Компании: Eltex
Стек: iOS, Swift
> Пример ответа
Утечка памяти - это ситуация, когда объект продолжает занимать память, хотя он больше не нужен приложению, и сборщик памяти (в случае Swift - ARC) не может его освободить. В iOS/Swift утечки гарантированно возникают при наличии сильных циклических ссылок (retain cycles), когда два или более объектов удерживают друг друга через сильные ссылки, и ARC не может обнулить их счетчики ссылок.
Типичные сценарии:
-
Замыкания (closures), которые захватывают
selfсильно, аselfсодержит сильную ссылку на замыкание. Например, в свойстве класса хранится замыкание, которое внутри используетself.method(). Решение - использовать[weak self]или[unowned self]. -
Делегаты, объявленные как сильные ссылки (вместо
weak). Если объект A (например, ViewController) устанавливает себя делегатом объекта B, а B хранит сильную ссылку на делегата, возникает цикл. -
Таймеры (Timer), которые удерживают цель (target) сильно. Если таймер не остановлен (например, в
deinit), он будет удерживать объект, даже если тот уже не нужен. -
Связки объектов через сильные ссылки (например, Parent → Child → Parent через сильные свойства).
Утечки также могут возникать из-за неосвобожденных ресурсов (например, не закрытые файлы, сокеты, изображения в кэше без контроля), но в контексте Swift/ARC основной гарантированный случай - это циклические сильные ссылки.
> Похожие задачи по mobile
Были ли реджекты приложений из-за скрытого функционала или дизайна?
Какой жизненный цикл у ячейки в списке в iOS?
Зачем в бизнес-логике используются слабые ссылки в Swift?
Помнишь названия команд или проектов, с которыми работал?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью