gpt4 book ai didi

SwiftUI - 可能的内存泄漏

转载 作者:行者123 更新时间:2023-11-28 07:21:00 25 4
gpt4 key购买 nike

我最近开始研究 SwiftUI 并浏览了一些推荐基于状态交换 View 的教程(参见下面的代码片段)。但是,我在调试时注意到,即使是最基本的 UI,内存使用量也会慢慢增加。这可能只是缺乏知识,但以这种方式与 SwiftUI 交换 View 是错误的吗?

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")
}
}
}

最佳答案

您的代码似乎是完全可以接受的 SwiftUI,并且确实在某处存在内存泄漏,因为来回切换(即使使用手动 Toggle() 而不是 asyncAfter () call)导致内存增加。

我认为这是 List 的一个错误,因为如果您将 List 更改为另一种类型的 View ,问题就会消失,而且我在对所有其他类型的 View 使用相同的模式时没有注意到它。

我会推荐你​​file feedback with Apple ,并在此处发布反馈编号,以便其他受影响的人可以提交自己的反馈编号并引用。

关于SwiftUI - 可能的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58067377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com