Утечка памяти SwiftUI NavigationView при использовании @EnvironmentObject

#memory-leaks #swiftui

Вопрос:

 class ViewModel: ObservableObject {
    
    @Published var title = "TITLE"
    
    init() {
        print("INIT")
    }
    
    deinit {
        print("DEINIT")
    }
    
}

struct ContentView: View {
    
    @State private var showFirstView = true
    
    var body: some View {
        NavigationView {
            VStack {
                ZStack {
                    if showFirstView {
                        TabContent1Parent()
                    }
                    else {
                        Text("OTHER VIEW")
                    }
                }
                Toggle(isOn: $showFirstView, label: {
                    Text("TOGGLE")
                })
            }
        }
    }
}

struct TabContent1Parent: View {
    @StateObject var viewModel = ViewModel()
    var body: some View {
        HStack {
            TabContent1Child()
        }
        // When it is commented no memory leak
        .environmentObject(viewModel)
    }
}

struct TabContent1Child: View {
    @EnvironmentObject var viewModel: ViewModel
    var body: some View {
        Text("smith")
    }
}
 

В приведенном выше примере, когда строка .environmentObject(ViewModel) комментируется, объект отменяется при переключении на «ДРУГОЕ ПРЕДСТАВЛЕНИЕ».

Когда объект среды передается, каждый раз, когда я переключаюсь на FirstView, печатается инициализация (выделяется новый объект), а деинит никогда не печатается.

Когда нет представления навигации (но передается объект среды), модель представления определяется, как и ожидалось.

Кто-нибудь может придумать обходной путь, но при этом сохранить объекты NavigationView и среды?