Observation
とObservableObject
を併用した方がパフォーマンスが良いと考えているのですが合ってますでしょうか?import SwiftUI import Observation struct ContentView: View { @State var count = 0 var body: some View { VStack { Text(count.description) Button { count += 1 print("count: \(count)") } label: { Text("count") } ChildView() } } } struct ChildView: View { @State var viewModel = ChildViewModel() var body: some View { Text("child") } } @MainActor @Observable final class ChildViewModel { init() { print("init") } deinit { print("deinit") } }
StateObject
を使えば初回のinitだけが有効になるので、以下のようにObservableObject
を適用するとボタンを押すたびにinitとdeinitが発火されることはなくなります。import SwiftUI import Observation struct ContentView: View { @State var count = 0 var body: some View { VStack { Text(count.description) Button { count += 1 print("count: \(count)") } label: { Text("count") } ChildView() } } } struct ChildView: View { @StateObject var viewModel = ChildViewModel() var body: some View { Text("child") } } @MainActor @Observable final class ChildViewModel: ObservableObject { init() { print("init") } deinit { print("deinit") } }