gpt4 book ai didi

swift - 在 Swift 中相互引用的两个弱变量?

转载 作者:IT王子 更新时间:2023-10-29 05:29:14 25 4
gpt4 key购买 nike

我今天又做了一次尝试,试图理解 Swift 中的循环保留和弱引用。通读documentation ,我看到了以下代码示例,其中一个引用变量被标记为 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 变量更改为 weak 以便我有

class Person {
// ...
weak var apartment: Apartment? // added 'weak'
// ...
}

class Apartment {
// ...
weak var tenant: Person?
// ...
}

其中有两个相互引用的弱变量。

我在 Playground 中对其进行了测试,它似乎工作正常,但是有什么充分的理由不这样做吗?在这种情况下,这里似乎没有天然的亲子关系。

最佳答案

你可以做到。唯一的副作用是您需要确保其他东西能够留住人和公寓。在原始代码中,您只需要保留人员,公寓(与人员相关联)将为您保留。

严格来说,当公寓被拆除时,人们并没有被杀死,而当人们死亡时,公寓也没有被拆除,所以在这种情况下,弱引用是有道理的。通常最好先考虑您想要的关系和所有权模型,然后再决定如何实现。

关于swift - 在 Swift 中相互引用的两个弱变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34565760/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com