> Что такое утечки памяти и когда они гарантированно возникают? (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 основной гарантированный случай - это циклические сильные ссылки.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью