首页 > 解决方案 > Swift ARC 困惑

问题描述

我一直在尝试跟进 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,因为没有更多的强 ref 分配给它。但是当我运行上面的示例时,它不会打印该语句。不确定是什么问题。对我的理解是否有一些困惑或发生了其他事情?

标签: iosswiftxcode

解决方案


推荐阅读