【发布时间】:2019-12-23 15:33:15
【问题描述】:
我有一个 SwiftUI 项目和一个绑定到 EnvironmentObject 的视图。此对象包含一个 @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 个复选框。我做错了什么还是有其他方法可以提高性能?我不想使用去抖动来解决这个问题。
额外信息 MacOS Catalina 10.15.2 在 XCode 11.3 中运行 MacOS SwiftUI 项目
附件是我每秒单击和取消单击我的一个复选框的仪器分析。在 Instruments 中,我什至看到 CPU 运行率高达 90%。
【问题讨论】:
-
我在 iOS 和 macOS 上都没有观察到这一点,最大约为 1%。你是怎么测试的?在什么环境下?请提供更多详细信息。
-
请查看我的更新。如果你愿意,我也可以与你分享我的测试项目
-
我使用 Xcode 11.2... 11.3 报告的错误太多,无法迁移。
-
我尝试了 11.2 并得到了相同的结果。当你快速点击时
-
我在模拟器和 iPhone 7 上运行过这个。快速切换时,手机上的 CPU 达到 25%。如果我将全局更改为结构和@State,结果相同。我不认为这是不合理的 CPU 使用率。
标签: performance swiftui