首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftUI ObservableObject CPU峰值

SwiftUI ObservableObject CPU峰值
EN

Stack Overflow用户
提问于 2019-12-23 15:33:15
回答 1查看 955关注 0票数 3

我有一个SwiftUI项目和一个绑定到EnvironmentObject的视图。此对象包含@已发布的属性。

代码语言:javascript
复制
import Foundation

class Global : ObservableObject{

    @Published var check :Bool = false;

}

当我运行应用程序并对我的属性进行更改时,我看到我的视图在每次更改时都会被重新绘制。

代码语言:javascript
复制
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%。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-08 10:46:02

当@观测点对象、@EnvironmentObject、@StateObject或@StateObject或@StateObject时,SwiftUI视图将被重新绘制。如果您使用这么多绑定到同一属性的切换,那么您将期望获得更高的CPU使用率。您没有做任何错误的事情,除了等待对SwiftUI本身的改进之外,没有其他方法可以提高它的性能。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59457790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档