Что выведет код 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 ошибок.