Карточка Senior ARC и циклы ссылок обновлено
Жизненный цикл объекта в Swift-рантайме
Вопрос
Что происходит с объектом и ссылками на него, когда счётчик сильных ссылок становится нулём?
Попробуйте сами
Ответьте про себя или вслух, потом откройте ответ и сверьтесь.
Показать ответ и разбор
Коротко
Объект переходит в состояние deiniting: загрузка weak-ссылки возвращает nil, обращение через unowned вызывает trap. Выполняется deinit, освобождаются свойства.
Ответ
Объект переходит в состояние deiniting: загрузка weak-ссылки возвращает nil, обращение через unowned вызывает trap. Выполняется deinit, освобождаются свойства. Память объекта освобождается, когда нет unowned-ссылок; side table живёт, пока есть weak.
Разбор
Поэтому десятки unowned-ссылок на большой объект держат его память, хотя deinit уже прошёл.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «ARC и циклы ссылок»
- Когда нужен autoreleasepool в Swift
- Цикл ссылок через замыкание-свойство
- Почему делегат объявляют weak
- DispatchQueue.main.async и self
- Задача на Swift: какие объекты утекут из-за циклов ссылок
- Инструменты для поиска проблем с памятью
- Утечка через NotificationCenter
- Порядок событий при освобождении объекта