簡體   English   中英

SwiftUI TextField 導致 Memory 泄漏

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM