Что выведет код Junior ARC и циклы ссылок спрашивают часто обновлено
Что выведет Swift: когда вызывается deinit
Вопрос
Что выведет код?
final class Resource {
let name: String
init(_ name: String) { self.name = name; print("init", name) }
deinit { print("deinit", name) }
}
var a: Resource? = Resource("A")
var b = a
a = nil
print("a = nil")
b = nil
print("b = nil")
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: init A, a = nil, deinit A, b = nil. После var b = a на объект две сильные ссылки.
Что выведет
init A
a = nil
deinit A
b = nil
Разбор
После var b = a на объект две сильные ссылки. Обнуление a оставляет одну, поэтому deinit срабатывает только при обнулении b, ещё до следующего print.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Порядок событий при освобождении объекта
Следующий вопрос
Что выведет Swift: владелец и слабая обратная ссылка
Ещё по теме «ARC и циклы ссылок»
- Когда нужен autoreleasepool в Swift
- Цикл ссылок через замыкание-свойство
- Почему делегат объявляют weak
- DispatchQueue.main.async и self
- Как найти утечку памяти в iOS-приложении
- Жизненный цикл объекта в Swift-рантайме
- Когда уместен unowned
- Задача на Swift: какие объекты утекут из-за циклов ссылок