History
Loading...
Loading...
September 4, 2025
@StateObject when creating an observable object for the first time in a view, and @ObservedObject when receiving it from a parent. This prevents unexpected deallocations during view updates.Use @StateObject in the view that owns and creates the observable object, and @ObservedObject in child views that receive it as a parameter. This ensures proper ownership and prevents memory issues.
class UserManager: ObservableObject {
@Published var userName = ""
@Published var isLoggedIn = false
}
struct ContentView: View {
@StateObject private var userManager = UserManager()
var body: some View {
NavigationView {
VStack {
UserProfileView(userManager: userManager)
SettingsView(userManager: userManager)
}
}
}
}
struct UserProfileView: View {
@ObservedObject var userManager: UserManager
var body: some View {
TextField("Username", text: $userManager.userName)
}
}@StateObject creates a strong reference and manages the object's lifecycle, while @ObservedObject assumes the object is managed elsewhere. Mixing these up can cause objects to be deallocated unexpectedly, leading to crashes or data loss during view recreations.