performance - SwiftUI ObservableObject CPU 峰值

标签 performance swiftui

我有一个 SwiftUI 项目和一个绑定(bind)到 EnvironmentObject 的 View 。该对象包含一个@Published 属性。

import Foundation

class Global : ObservableObject{

    @Published var check :Bool = false;

}

当我运行应用程序并对我的属性进行更改时,我发现每次更改时我的 View 都会重新绘制。

import SwiftUI
import Combine


struct ContentView: View {

    @EnvironmentObject var global :Global

    var body: some View {
        VStack{
        VStack{
        Toggle("Checked", isOn: $global.check)
        Toggle("Checked", isOn: $global.check)
        Toggle("Checked", isOn: $global.check)
        Toggle("Checked", isOn: $global.check)
        Toggle("Checked", isOn: $global.check)
        Toggle("Checked", isOn: $global.check)


        }
        VStack{
            Toggle("Checked", isOn: $global.check)
            Toggle("Checked", isOn: $global.check)
            Toggle("Checked", isOn: $global.check)
            Toggle("Checked", isOn: $global.check)
            Toggle("Checked", isOn: $global.check)
            Toggle("Checked", isOn: $global.check)


            }
        VStack{
            Toggle("Checked", isOn: $global.check)
            Toggle("Checked", isOn: $global.check)
            Toggle("Checked", isOn: $global.check)
            Toggle("Checked", isOn: $global.check)
            Toggle("Checked", isOn: $global.check)
            Toggle("Checked", isOn: $global.check)


            }
        VStack{
            Toggle("Checked", isOn: $global.check)
            Toggle("Checked", isOn: $global.check)
            Toggle("Checked", isOn: $global.check)
            Toggle("Checked", isOn: $global.check)
            Toggle("Checked", isOn: $global.check)
            Toggle("Checked", isOn: $global.check)


            }
        }
    }
}

CPU 使用率接近 15%,只是为了绘制 20 个复选框。是我做错了什么,还是有其他方法可以提高性能?我不想使用去抖来解决这个问题。

额外信息 MacOS Catalina 10.15.2 在 XCode 11.3 中运行 MacOS SwiftUI 项目

附件是我每秒点击和取消点击我的一个复选框的仪器分析。在 Instruments 中,我什至看到 CPU 运行到 90%。

enter image description here

最佳答案

当@ObservedObject、@EnvironmentObject、@StateObject 或@State 改变时,SwiftUI View 会被重绘。如果您使用这么多绑定(bind)到同一属性的切换,那么您会期望更高的 CPU 使用率。你没有做错任何事,除了等待 SwiftUI 本身的改进之外,没有办法为你的目的提高它的性能。

关于performance - SwiftUI ObservableObject CPU 峰值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59457790/

相关文章:

c++ - 为什么我的程序不能在GDB在线编译器/调试器或Visual Studio C++ 2019中运行?

c++ - 在微不足道的键的情况下,使用 map 而不是 unordered_map 有什么优势吗?

c - 有没有办法_完全_避免缓存未命中?

mysql - 如何优化在 130,000 行上运行的联接查询?

mysql - 我如何优化 SUM() mysql 查询

swift - 在 SwiftUI 中显示详细 View 的导航标题

在列表中的部分之间移动项目时,SwiftUI 奇怪的行为

ios - 因此,我构建了一个应用程序,该应用程序希望每分钟获得字数。如何使用SwithUI启动ContentView中不存在的计时器

ios - SwiftUI:NavigationView 内 TabBar 内的 ListView 生成空 View

swift - 为什么我在切换屏幕时会丢失我的 SwiftUI View