Вопрос на собеседовании · iOS-разработчик
Как работает ARC и почему возникают retain cycle?
Короткий ответ, ключевые тезисы и ошибки, которых стоит избежать на интервью.
ARC считает сильные ссылки на экземпляры class и освобождает объект, когда их больше нет. Retain cycle возникает, когда несколько объектов удерживают друг друга по сильным ссылкам: например, контроллер хранит сервис, сервис хранит completion, а completion захватывает контроллер. Пока цикл замкнут, deinit не вызовется даже после ухода с экрана.
Разрывают цикл по семантике владения. weak-ссылка optional и автоматически становится nil после освобождения объекта; unowned уместна лишь когда объект гарантированно жив дольше ссылки, иначе доступ приведёт к падению. В длительных или асинхронных completion обычно используют [weak self], затем явно решают, что делать, если self уже нет.
01 · Структура ответа
Что важно сказать интервьюеру
Начните с определения, затем объясните механизм и закончите примером из практики. Для полного ответа раскройте эти тезисы:
02 · Пример
Как объяснить на практике
ViewController запускает загрузку и сохраняет cancellable в поле. В completion он пишет [weak self], потому что запрос может завершиться после закрытия контроллера; при nil просто не обновляет UI. Если сервис сам хранит completion до отмены, это предотвращает удержание контроллера сервисом.
Не заучивайте формулировку дословно. Свяжите принцип с задачей из собственного проекта — интервьюер почти наверняка попросит уточнить детали реализации и компромиссы.
03 · Ошибки
Чего избегать в ответе
04 · Углубление
Что могут спросить следом
- Как найти утечку в Instruments?
- Почему delegate часто weak?
- Чем capture list отличается от свойства weak?
Практика ответа
Ответьте вслух, а не про себя
Откроем тренировку сразу на этом вопросе. Выберите грейд, сформулируйте ответ и сравните его с подсказкой.
Mira