我最近开始研究SwiftUI,并完成了一些建议根据状态交换视图的教程(请参见下面的代码段)。但是,我在调试时注意到,即使是最基本的UI,内存使用也会缓慢增加。这可能只是缺乏知识,但是用SwiftUI以这种方式交换视图是否错误?
Version 11.0 (11A420a) - iOS 13
// Memory Leak Test
struct ContentView: View {
@State private var toggle = false
func cycleViews() {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
self.toggle = !self.toggle
self.cycleViews()
}
}
var body: some View {
Group {
if toggle {
ViewA()
} else {
ViewB()
}
}.onAppear {
self.cycleViews()
}
}
}
struct ViewA: View {
var body: some View {
VStack {
Text("Some Content")
Text("Some Content")
Text("Some Content")
Text("Some Content")
Text("Some Content")
}
}
}
struct ViewB: View {
var body: some View {
List {
Text("Some Content")
Text("Some Content")
Text("Some Content")
Text("Some Content")
Text("Some Content")
}
}
}
答案 0 :(得分:0)
您的代码似乎是完全可以接受的SwiftUI,并且似乎确实存在内存泄漏,因为来回切换(即使使用手动Toggle()
而不是asyncAfter()
调用)也会导致增加内存。
我认为这是List的错误,因为如果将List更改为另一种视图类型,该问题将消失,并且当在所有其他类型的视图中使用相同模式时,我没有注意到它。
我建议您file feedback with Apple,并在此处发布反馈号,以便其他受影响的人可以自己提交并引用。