struct ContentView: View {
var body: some View {
Text("Hello World")
}
}
struct contentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
为了将 Struct 作为起点,我们将在 View 上设计的所有 UI 都将在 Struct 内部,我们知道 Struct 是值类型,它将在堆栈中分配内存。
就内存而言,它会产生怎样的影响?
最佳答案
值类型行为是他们在 SwiftUI 中真正想要的。 SwiftUI 的灵感之一是 ReactJS 中的虚拟 DOM。
实现的关键部分是存在 UI 树的多个副本,SwiftUI 比较它们以查看发生了什么变化。例如:
- 生成 View 树A
- 渲染 View 树A到屏幕
- 状态变化(例如用户点击了一个按钮)
- 生成 View 树B
- 检查树 A 和 B 之间的差异,只渲染需要的部分。
生成副本对于类来说相当困难,但对于值类型则很简单。
与类相比还有其他优势,但这是主要原因。值类型(作为不可变数据结构)非常适合 SwiftUI 中使用的函数式编程模式。
关于内存,请注意结构并不比类占用更多的空间,并且认为它们只存在于堆栈中是一种误解。它们在堆栈中被分配为临时对象,但是一旦您将它们保存在某个地方(例如,一个类属性),它们就不再存在于堆栈中。
关于ios - 在 SwiftUI 中将 Struct 而不是 Class 作为起点有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57070611/