SwiftUI 中 @ObservedObject 与 @StateObject 的区别

SwiftUI 中 @ObservedObject 与 @StateObject 的区别

💡 原文中文,约6600字,阅读约需16分钟。
📝

内容提要

本文讨论了SwiftUI中@ObservedObject和@StateObject的区别,@ObservedObject在View刷新时会重复创建,而@StateObject只会创建一次。@StateObject用于View的数据来源,@ObservedObject用于在不同的View之间传递ObservableObject。文章还介绍了SwiftUI 5中的@Observable宏,可以替代@ObservedObject和@Published声明,但会导致Subview的重绘和@State的ViewModel重建。作者建议目前还是使用@StateObject为主,如果迁移到@Observable宏,需要解决重建ViewModel的问题。

🎯

关键要点

  • @ObservedObject和@StateObject的生命周期不同,@ObservedObject在View刷新时会重复创建,而@StateObject只会创建一次。

  • @StateObject用于View的数据来源,而@ObservedObject用于在不同的View之间传递ObservableObject。

  • 使用@StateObject可以避免在View多次刷新时重复调用初始化方法,确保数据逻辑不被重复执行。

  • 当需要将Parent View的@StateObject传递给Subview时,可以在Subview中使用@ObservedObject。

  • SwiftUI提供@EnvironmentObject用于在View层级上传递全局数据,避免逐层传递。

  • SwiftUI 5引入了@Observable宏,可以替代@ObservedObject和@Published声明,但可能导致Subview的重绘和@State的ViewModel重建。

  • 目前建议主要使用@StateObject,迁移到@Observable宏时需解决ViewModel重建的问题。

➡️

继续阅读