我有一个SwiftUI项目和一个绑定到EnvironmentObject的视图。此对象包含@已发布的属性。
import Foundation
class Global : ObservableObject{
@Published var check :Bool = false;
}当我运行应用程序并对我的属性进行更改时,我看到我的视图在每次更改时都会被重新绘制。
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项目
附件是我每秒钟点击和取消一个复选框的仪器剖析。在仪器中,我甚至看到CPU运行到90%。

发布于 2020-07-08 10:46:02
当@观测点对象、@EnvironmentObject、@StateObject或@StateObject或@StateObject时,SwiftUI视图将被重新绘制。如果您使用这么多绑定到同一属性的切换,那么您将期望获得更高的CPU使用率。您没有做任何错误的事情,除了等待对SwiftUI本身的改进之外,没有其他方法可以提高它的性能。
https://stackoverflow.com/questions/59457790
复制相似问题