我一直在尝试跟进Swift官方文档,并尝试浏览他们提供的自动引用计数示例。在他们的示例中,他们试图显示如何使用弱引用避免强引用循环。
import UIKit
class Person {
let name: String
init(name: String) { self.name = name }
var apartment: Apartment?
deinit { print("\(name) is being deinitialized") }
}
class Apartment {
let unit: String
init(unit: String) { self.unit = unit }
weak var tenant: Person?
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
print("Strong ref cycle")
如文档中所述,当我们将nil分配给john引用时,它应该调用deinit,因为没有更多的强引用分配给它。但是,当我运行上面的示例时,它不会打印该语句。不确定是什么问题。关于我的理解是否有些困惑或正在发生其他事情?