По порядку Senior ARC и циклы ссылок обновлено

Порядок событий при освобождении объекта

Вопрос

Расставьте по порядку, что происходит, когда исчезает последняя сильная ссылка на объект класса.

Попробуйте сами

Расставьте шаги по порядку стрелками.

  1. 1
    Память объекта возвращается, когда не осталось unowned-ссылок
  2. 2
    Выполняется тело deinit (сначала подкласса, потом суперкласса)
  3. 3
    Объект помечается как деинициализируемый: weak-ссылки начинают возвращать nil
  4. 4
    Счётчик сильных ссылок становится равен нулю
  5. 5
    Освобождаются хранимые свойства объекта
Показать ответ и разбор

Коротко

Weak-ссылки обнуляются раньше, чем выполнится deinit, поэтому из deinit нельзя «спасти» объект через weak. Свойства освобождаются после тела deinit, и в нём к ним ещё можно обращаться.

Правильный порядок

  1. 1
    Счётчик сильных ссылок становится равен нулю
  2. 2
    Объект помечается как деинициализируемый: weak-ссылки начинают возвращать nil
  3. 3
    Выполняется тело deinit (сначала подкласса, потом суперкласса)
  4. 4
    Освобождаются хранимые свойства объекта
  5. 5
    Память объекта возвращается, когда не осталось unowned-ссылок

Разбор

Weak-ссылки обнуляются раньше, чем выполнится deinit, поэтому из deinit нельзя «спасти» объект через weak. Свойства освобождаются после тела deinit, и в нём к ним ещё можно обращаться. Освобождение памяти откладывается, пока есть unowned-ссылки.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.