美文网首页SwiftUI
SwiftUI中的@StateObject、@ObservedO

SwiftUI中的@StateObject、@ObservedO

作者: 喔牛慢慢爬 | 来源:发表于2024-02-05 09:41 被阅读0次

在 SwiftUI 中,@StateObject, @ObservedObject, 和 @State 都是用来管理视图状态的属性包装器,但它们的应用场景和行为有所不同:

  1. @State:

用于存储本地视图状态,如布尔值、字符串、数值等。
当 @State 属性的值发生变化时,SwiftUI 会自动触发关联视图的重新渲染。
@State 的生命周期与关联视图相同,当视图被销毁时,其内部存储的状态也会随之释放。

  1. @ObservedObject:

适用于观察一个遵循 ObservableObject 协议的对象,这个对象通常用来封装需要跨多个视图共享或从外部获取的数据源(例如网络请求结果、数据库模型等)。
当该对象内部通过 @Published 标注的属性发生改变时,所有引用了此对象的视图都会收到通知并重新渲染。
@ObservedObject 的生命周期并不绑定于任何一个特定的视图,它可能由父视图传入或者在其他地方创建,这意味着即使当前视图被销毁,该对象也可能继续存在。在不需要该对象时,需要手动管理其生命周期以避免内存泄漏。

  1. @StateObject (自 iOS 14 引入):

类似于 @ObservedObject,也是用于观察一个遵循 ObservableObject 协议的对象,但它确保在整个视图树中只有一个实例,并且随着包含它的视图重建而保留其状态。
当视图及其关联的 @StateObject 被移除后,系统会自动释放对象以避免内存泄漏。
在大多数情况下,如果视图需要拥有并管理一个需要保持唯一性的响应式对象,应该使用 @StateObject,而不是 @ObservedObject。

  1. 总结来说:
  • @State 用于管理简单的局部视图状态。
  • @ObservedObject 用于跨视图共享和观察响应式数据模型,但不保证对象的生命周期与视图同步。
  • @StateObject 同样用于观察响应式数据模型,但提供了一种方式来确保对象在整个视图树中的唯一性,并且会随视图重建而保留状态,同时在适当的时候自动释放资源。

相关文章

网友评论

    本文标题:SwiftUI中的@StateObject、@ObservedO

    本文链接:https://www.haomeiwen.com/subject/rtdqadtx.html