微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

静态变量与存储属性的方法

如何解决静态变量与存储属性的方法

在我的 SwiftUI 应用程序中,我目前使用的是一个全局结构,该结构包含诸如颜色或大小之类的常量属性。 例如

struct App {
    struct Colors {
        static let mainAppColor: UIColor = UIColor(red: 233/255,green: 230/255,blue: 231/255)
        static let mainWhiteColorMiddleOpacity: UIColor = UIColor.white.opacity(0.5)
    }
}

// usage
struct ContentView: View {
    var body: some View {
        Rectangle().foregroundColor(App.Colors.mainBlueColor)
    }
}

我一直在争论这是否是一种不好的做法,因为我有很多静态变量,并且想知道用静态方法或计算属性替换它们是否会减少内存使用量(因为 body 被计算了很多次)。例如。替换:

struct App {
    struct Colors {
        static var mainBlueColor: UIColor { UIColor.blue }
        static var mainWhiteColorMiddleOpacity: UIColor { UIColor.white.opacity(0.5) }
    }
}

// usage
struct ContentView: View {
    var body: some View {
        Rectangle().foregroundColor(App.Colors.mainBlueColor)
    }
}

一个增加堆使用量,另一个增加堆栈使用量,对吗? 您认为最佳做法是什么?

解决方法

计算属性仅在需要计算的情况下才有用,因此 variable 有意义。

您肯定是在创建常量(正如您所提到的),因此请使用 let

关于内存使用:如何在资产目录中声明颜色?

,

过早(且考虑不周)的优化。您可能不知道,从宏观的角度来看,即使是数千个这样的值实际上占用的内存也很少;这是微不足道的。任何编写得体的应用都会有很多这样的应用;这就是你所做的。

结构是组织和命名此类事物的好方法,尽管现在 Apple 更喜欢使用枚举(出于我不完全理解的原因)。

你的“因为身体被计算了很多次”是完全不相关的:这个名字是对值的直接引用,绝对没有开销,因为如果你使用 let 整个事情被编译掉并被替换为值就在代码中的引用点。运行时的查找时间为零!

(另一方面,计算值或方法可能每次都需要一些严重的开销来运行,这可能会使整个消息分发机制发挥作用,尽管它实际上可能被内联掉了。在那里严重倒退。)

,

我会说永远不要将计算属性用于您已经知道答案或值的事情,从另一方面来说,您知道 SwiftUI 会运行多少次计算属性来使用它吗?这么多运行代码以获得相同的东西!

你可以在你的应用程序中使用计算属性来获取你需要的东西,只是为了读取值,例如你有一个知道宽度和高度的矩形,然后使用计算属性来获取面积,或者其他东西类似这样,读完value你也就完成了,也不需要存储了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。