我观察到了基于示例化StateObject
位置的性能差异。具体来说,我注意到当顶层View
拥有StateObject
时,我的应用在主线程上的使用量减少了约5%。出于某种原因,在SwiftUI App
中示例化此StateObject
的性能较低。我的期望是性能将是相同的,因为没有其他更改。
虽然这5%可能看起来不多,但结果可能是某些设备的CPU利用率提高10-15%。在我的StateObject
中,我定义了一个CADisplayLink
,它在每个帧上运行回调,所以这是使用大部分计算的地方。
出于某种原因,这:
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
MyView()
}
}
}
struct MyView: View {
@StateObject var someStateObject = SomeStateObject()
var body: some View {
Text("Hello World")
}
}
性能比这更高:
@main
struct MyApp: App {
@StateObject var someStateObject = SomeStateObject()
var body: some Scene {
WindowGroup {
MyView()
}
}
}
struct MyView: View {
var body: some View {
Text("Hello World")
}
}
SwiftUI的App
是否会产生这些性能差异?
1条答案
按热度按时间1dkrff031#
原来这个问题与从应用程序级别调用CADisplayLink有关,而不是视图。一旦我将CADisplayLink移动到视图,perf问题就得到了修复。