Я пытаюсь узнать, как именно работает ARC, поэтому я прочитал документацию Swift ARC , и я следовал примеру, который они приводят в документе, используя площадку:
class Person {
let name: String
weak var apartment: Apartment?
init(name: String) { self.name = name }
deinit { print("\(name) is being deinitialized") }
}
class Apartment {
let unit: String
weak var tenant: Person?
init(unit: String) { self.unit = unit }
deinit { print("Apartment \(unit) is being deinitialized") }
}
var john: Person?
var unit4A: Apartment?
john = Person(name: "John Appleseed")
unit4A = Apartment(unit: "4A")
john?.apartment = unit4A
unit4A?.tenant = john
john = nil
unit4A = nil
Myвопрос в том, почему, когда я вызываю Person
экземпляр john
необязательно:
john?.apartment = unit4A
объект освобождается, но когда я называю его принудительно развернутым:
john!.apartment = unit4A
он не становитсяперераспределена.