Как хранятся weak-ссылки в Swift
Вопрос
Как Swift реализует weak-ссылки начиная с Swift 4?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Через side table: при первой weak-ссылке создаётся побочная таблицаправильный ответ
- Через глобальную хеш-таблицу всех weak-ссылок, как в Objective-C runtime
- Weak это сильная ссылка с флагом слабости в младшем бите
- Фоновый поток сканирует weak-ссылки и обнуляет мёртвые
Разбор
В объекте есть inline-счётчики strong и unowned. Когда появляется первая weak-ссылка, создаётся side table со всеми счётчиками, и weak-ссылки указывают на неё, а не на объект. Поэтому память объекта освобождается сразу после деинициализации (если нет unowned-ссылок), а маленькая таблица живёт, пока есть weak. Глобальная таблица weak-ссылок это реализация Objective-C runtime. Флагов и фонового сканирования нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Что выведет Swift: замыкание с weak self после освобождения
Следующий вопрос
ARC и сборка мусора: сравнение
Ещё по теме «ARC и циклы ссылок»
- Когда нужен autoreleasepool в Swift
- Цикл ссылок через замыкание-свойство
- Почему делегат объявляют weak
- DispatchQueue.main.async и self
- Как найти утечку памяти в iOS-приложении
- Жизненный цикл объекта в Swift-рантайме
- Когда уместен unowned
- Задача на Swift: какие объекты утекут из-за циклов ссылок