[英]SwiftUI TextField Causing Memory Leaks
几天来,我一直在追踪我的项目中的一个 memory 泄漏问题,并且似乎已使用 TextField 将其隔离到视图中。 在视图中使用 TextField 时,导航离开然后返回视图会导致 memory 泄漏显示在 Instruments 中。
该项目包含多个导航链接并且正在处理核心数据,但我能够使用具有两个导航链接且没有核心数据的最小项目重现该问题。 这些链接导航到一个简单的视图,其中包含一个 Text 项和一个 TextField,它们都引用一个 @State 变量。 在两个视图之间导航而不向 TextField 输入任何数据足以触发 Instruments 中的泄漏。 在没有其他更改的情况下注释掉 TextField 可以防止泄漏出现。
最小项目是为多平台创建的,发现泄漏是使用 macOS 作为目标(没有尝试任何 iOS 目标,因为它们现在不工作)。 Xcode 版本是 13.2.1。 部署目标是 macOS 12.0。 在装有 Monterey 12.2 Beta 版的 MacBook Pro 上运行。
下面是内容视图的代码:
struct ContentView: View {
var body: some View {
NavigationView {
List {
NavigationLink("Link 1", destination: TestView())
NavigationLink("Link 2", destination: TestView())
}
}
}
}
对于 TestView:
struct TestView: View {
@State var testString = "Hello, world!"
var body: some View {
VStack {
Text(testString)
TextField("Test", text: $testString)
}
.padding()
}
}
当刚刚在 Xcode 下运行时,我偶尔也会注意到调试区域显示消息“onChange(of: Bool) 操作尝试每帧更新多次。” 也不知道为什么会发生这种情况,尽管它似乎与 TextField 是否存在无关。
如果有人能告诉我发生了什么/为什么会发生这种情况,以及我是否应该担心这些泄漏,我将不胜感激。
添加 12/30/21:我尝试用 TextEdit 替换 TextField,并且在视图之间切换时不再显示 memory 泄漏。
21 年 12 月 30 日:参考应该是使用 TextEditor,而不是 TextEdit。
我在使用苹果铅笔和带有 .onSubmit 修饰符的 TextField 时看到了这个问题。 如果我使用屏幕键盘,则不会泄漏。
我发现当我将 .keyboardType(.numberPad) 添加到 TextField 时,问题就解决了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.