gpt4 book ai didi

performance - SwiftUI ObservableObject CPU 峰值

转载 作者:行者123 更新时间:2023-12-04 14:16:46 46 4
gpt4 key购买 nike

我有一个 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/

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