SwiftUI

SwiftUI中的@StateObject、@ObservedO

2024-02-05  本文已影响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. 总结来说:
上一篇 下一篇

猜你喜欢

热点阅读