gpt4 book ai didi

swift - 值类型中的引用类型

转载 作者:搜寻专家 更新时间:2023-10-31 08:17:41 25 4
gpt4 key购买 nike

我正在探索 Swift 值类型,尤其是结构,以便更好地了解它在不同场景中的用途。我很惊讶地看到如何使用枚举来构建二叉搜索树,使用 indirect 引入了一层薄薄的引用语义。

enum BinarySearchTree<T: Comparable> {
case empty
case leaf(T)
indirect case node(BinarySearchTree, T, BinarySearchTree)
}

现在谈到真正的问题,我正在努力寻找的是,值类型中的引用类型会发生什么。这种关系将如何运作?例如内存管理、对象生命周期。

例如

class B {
var data: Int = 0

deinit {
print("deallocated!")
}

}

struct A {
var b = B()
}

在上面的例子中,值类型持有对引用类型的引用。

  1. deinit 什么时候会被调用?
  2. A 类型的每个新结构实例是否都将引用类 B 的相同实例,或者它们是否不同。
  3. 我需要注意什么,或者是代码味道?
  4. 还有什么事吗?

最佳答案

每个结构 A copy 将共享对 B相同引用。从头开始创建的每个 结构 A 都将包含一个全新的 B 对象。

B.deint 将在 为零时调用 strong references 到它(例如,您的 var b 是这些强引用之一)。例如,如果只有 A 值持有对给定 B 对象的引用,那么这些值将需要超出范围以将对此对象(或其 盒装副本也会被释放,但这可能是另一个问题的主题。)

代码设计。如果这些听起来都太困惑并且阻碍了您的应用程序进展(到目前为止没有真正的实际好处),您也可以考虑将 B 重构为一个结构。例如,即使 Apple recommends considering value types设计您的模型层This blog post也可能有助于您下定决心。

关于swift - 值类型中的引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43218486/

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