swift StateObject在视图而不是顶级应用程序中示例化时是否性能更高?

hrirmatl  于 2022-12-10  发布在  Swift
关注(0)|答案(1)|浏览(111)

我观察到了基于示例化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是否会产生这些性能差异?

1dkrff03

1dkrff031#

原来这个问题与从应用程序级别调用CADisplayLink有关,而不是视图。一旦我将CADisplayLink移动到视图,perf问题就得到了修复。

相关问题