【发布时间】:2017-06-23 01:55:18
【问题描述】:
我正在努力更好地理解 ARC 并正在使用 Apples Documentation
通过第一个示例,我没有得到 Apple 声明的预期结果; “因为弱引用不会对其引用的实例保持强控制,所以当弱引用仍在引用它时,该实例可能会被释放。因此,ARC 自动将弱引用设置为 nil 当实例它指的是被释放。”
我在 XCode 8.3.2 中使用游乐场
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 //This prints "John Appleseed is being deinitialized" (as expected)
unit4a?.tenant?.name //This shows "John Appleseed" (expected nil)
unit4a = nil //Prints "Unit4a is being deinitialized" (as expected)
我知道这会阻止强引用循环,以便可以取消初始化两者,但我不明白为什么 unit4a 保留对租户的引用?
【问题讨论】:
标签: swift automatic-ref-counting weak-references swift-playground