#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 и среды?