Выбор ответа Senior ARC и циклы ссылок обновлено

Как хранятся weak-ссылки в Swift

Вопрос

Как Swift реализует weak-ссылки начиная с Swift 4?

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

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Через side table: при первой weak-ссылке создаётся побочная таблица. В объекте есть inline-счётчики strong и unowned.

Варианты ответа

  1. Через side table: при первой weak-ссылке создаётся побочная таблицаправильный ответ
  2. Через глобальную хеш-таблицу всех weak-ссылок, как в Objective-C runtime
  3. Weak это сильная ссылка с флагом слабости в младшем бите
  4. Фоновый поток сканирует weak-ссылки и обнуляет мёртвые

Разбор

В объекте есть inline-счётчики strong и unowned. Когда появляется первая weak-ссылка, создаётся side table со всеми счётчиками, и weak-ссылки указывают на неё, а не на объект. Поэтому память объекта освобождается сразу после деинициализации (если нет unowned-ссылок), а маленькая таблица живёт, пока есть weak. Глобальная таблица weak-ссылок это реализация Objective-C runtime. Флагов и фонового сканирования нет.

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

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