我有一个SwiftUI项目和一个绑定到EnvironmentObject的View。该对象包含@Published属性。
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个复选框即可。我做错了什么吗,还是有其他方法可以提高性能?我不想使用反跳来解决此问题。
其他信息 在XCode 11.3中运行MacOS SwiftUI项目的MacOS Catalina 10.15.2
附件是我每秒对我的一个复选框单击和取消单击的“乐器”配置文件。在Instruments中,我什至看到CPU的运行速度达到90%。
答案 0 :(得分:2)
当@ ObservedObject,@ EnvironmentObject,@ StateObject或@State更改时,SwiftUI视图将重绘。如果您使用绑定到同一属性的切换开关太多,那么您会期望更高的CPU使用率。您没有做错任何事情,除了等待SwiftUI本身的改进之外,没有其他方法可以提高其性能。