Contents of MyApp.swift
import SwiftUI
@main
struct AnimateOnObservedPropertyChangeApp: App {
@State var trigger = false
var body: some Scene {
WindowGroup {
ZStack {
ContentView()
Button("Re-init Content View") {
self.trigger.toggle()
}.onChange(of: self.trigger) { _, _ in }
}
}
}
}
Contents of ContentView.swift
import SwiftUI
@Observable
final class DoesThisLeak {
init() {
print("In initializer of DoesThisLeak")
}
deinit {
print("In deinitializer of DoesThisLeak")
}
}
struct ContentView: View {
init() {
print("In the initializer of ContentView")
}
let myData = DoesThisLeak()
var body: some View {
Color.gray
}
}
Output at runtime when tapping the 're-init' button:
:: startup
In initializer of DoesThisLeak
In the initializer of ContentView
:: tap on 're-init'
In initializer of DoesThisLeak
In the initializer of ContentView
In deinitializer of DoesThisLeak
:: tap on 're-init'
In initializer of DoesThisLeak
In the initializer of ContentView
In deinitializer of DoesThisLeak
That is, DoesThisLeak
is not leaking.