我今天再次尝试理解在Swift中保留循环和弱引用的概念。阅读文档时,我看到以下代码示例,其中一个引用变量被标记为weak
以防止保留循环:
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? // <---- This var is marked as 'weak'
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 // prints "John Appleseed is being deinitialized"
unit4A = nil // prints "Apartment 4A is being deinitialized"
将两个变量都设为弱引用是否存在问题?也就是说,在 Person
类中,我能否将 apartment
变量更改为弱引用,以便我拥有
class Person {
// ...
weak var apartment: Apartment? // added 'weak'
// ...
}
class Apartment {
// ...
weak var tenant: Person?
// ...
}
其中有两个相互引用的弱变量。
我在Playground中测试了一下,似乎可以正常工作,但是是否有任何强烈的理由不这样做呢?在这种情况下,似乎没有自然的父子关系。