DevPrep

Все темы › Управление памятью

Опишите жизненный цикл объекта в Swift.

Senior PRO

Фазы (по RefCount.h рантайма)

  1. Live — strong RC > 0. Все виды ссылок работают.
  2. Deiniting — strong RC упал до 0, выполняется deinit. Уже в этой фазе чтение weak возвращает nil, а чтение unowned даёт трап. Объект «воскресить» нельзя: сохранить self из deinit в сильную переменную — ошибка.
  3. Deinited — deinit завершён, поля уничтожены, но память не освобождена, пока unowned RC > 0 (unowned-ссылки должны увидеть детерминированный трап, а не мусор).
  4. Freed — unowned RC = 0, память возвращена аллокатору. Если есть side table, она ещё жива.
  5. Dead — weak RC = 0, side table освобождена. Объекта больше нет нигде.

Если на объект никогда не брали weak, side table нет, и фазы 4–5 схлопываются.

Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.

Полный ответ — в DevPrep

Потренируйтесь перед собеседованием

В DevPrep эти ответы превращаются в задачи на минуту: что напечатает код, найди баг, пробное собеседование. По задаче в день.

Скачать DevPrep в App Store