gpt4 book ai didi

ios - SwiftUI 中的 ObservedObject 和 StateObject 有什么区别

转载 作者:行者123 更新时间:2023-12-01 09:58:58 33 4
gpt4 key购买 nike

如果我有一个 ObservableObject在 SwiftUI 中,我可以将其称为 @ObservedObject :

class ViewModel: ObservableObject {
@Published var someText = "Hello World!"
}

struct ContentView: View {
@ObservedObject var viewModel = ViewModel()

var body: some View {
Text(viewModel.someText)
}
}
或作为 @StateObject :
class ViewModel: ObservableObject {
@Published var someText = "Hello World!"
}

struct ContentView: View {
@StateObject var viewModel = ViewModel()

var body: some View {
Text(viewModel.someText)
}
}
但两者之间的实际区别是什么?有没有一种情况比另一种更好,或者它们是两种完全不同的东西?

最佳答案

@ObservedObject
当 View 创建自己的 @ObservedObject每次丢弃和重绘 View 时都会重新创建它的实例:

struct ContentView: View {
@ObservedObject var viewModel = ViewModel()
}
相反一个 @State重绘 View 时,变量将保持其值。
@StateObject
一个 @StateObject@ObservedObject的组合和 @State - ViewModel的实例即使在 View 被丢弃和重绘后,也将被保留和重用:
struct ContentView: View {
@StateObject var viewModel = ViewModel()
}
性能
虽然 @ObservedObject如果 View 被迫经常重新创建重量级对象可能会影响性能,当 @ObservedObject 时应该没有太大关系。并不复杂。
何时使用@ObservedObject
现在似乎没有理由使用 @ObservedObject ,那么应该什么时候使用呢?

You should use @StateObject for any observable properties that youinitialize in the view that uses it. If the ObservableObject instanceis created externally and passed to the view that uses it mark yourproperty with @ObservedObject.


请注意,可能的用例太多,有时可能需要在您的 View 中重新创建一个可观察的属性。在这种情况下,最好使用 @ObservedObject .
有用的链接:
  • What’s the difference between @StateObject and @ObservedObject?
  • What is the @StateObject property wrapper?
  • 关于ios - SwiftUI 中的 ObservedObject 和 StateObject 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62544115/

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