Вопрос на собеседовании · iOS-разработчик

Как работает ARC и почему возникают retain cycle?

Короткий ответ, ключевые тезисы и ошибки, которых стоит избежать на интервью.

Обновлено 19 августа 2026 г.Встречается почти всегда
iOS-разработчикПрофессии и разделы
Короткий ответ

ARC считает сильные ссылки на экземпляры class и освобождает объект, когда их больше нет. Retain cycle возникает, когда несколько объектов удерживают друг друга по сильным ссылкам: например, контроллер хранит сервис, сервис хранит completion, а completion захватывает контроллер. Пока цикл замкнут, deinit не вызовется даже после ухода с экрана.

Разрывают цикл по семантике владения. weak-ссылка optional и автоматически становится nil после освобождения объекта; unowned уместна лишь когда объект гарантированно жив дольше ссылки, иначе доступ приведёт к падению. В длительных или асинхронных completion обычно используют [weak self], затем явно решают, что делать, если self уже нет.

01 · Структура ответа

Что важно сказать интервьюеру

Начните с определения, затем объясните механизм и закончите примером из практики. Для полного ответа раскройте эти тезисы:

ARC относится к reference types, а не к struct.
Цикл требует сильных ссылок по замкнутому пути.
weak безопаснее для неопределённого жизненного цикла, но optional.
unowned требует строгой гарантии времени жизни.

02 · Пример

Как объяснить на практике

ViewController запускает загрузку и сохраняет cancellable в поле. В completion он пишет [weak self], потому что запрос может завершиться после закрытия контроллера; при nil просто не обновляет UI. Если сервис сам хранит completion до отмены, это предотвращает удержание контроллера сервисом.

Не заучивайте формулировку дословно. Свяжите принцип с задачей из собственного проекта — интервьюер почти наверняка попросит уточнить детали реализации и компромиссы.

03 · Ошибки

Чего избегать в ответе

Ставить weak на все ссылки без анализа владения.
Использовать unowned в callback сетевого запроса.
Искать retain cycle только между двумя свойствами и забывать closure.

04 · Углубление

Что могут спросить следом

  1. Как найти утечку в Instruments?
  2. Почему delegate часто weak?
  3. Чем capture list отличается от свойства weak?

Практика ответа

Ответьте вслух, а не про себя

Откроем тренировку сразу на этом вопросе. Выберите грейд, сформулируйте ответ и сравните его с подсказкой.

Потренировать ответ