一尘不染

Singleton VS静态(类)变量

swift

Swift的最佳做法是什么?

选项1:

class SomeManager {

    static var sharedManager = SomeManager()

    var someVariable: String?

}

然后

let something = SomeManager.sharedManager().someVariable

选项2:

class SomeManager {

    static var someVariable: String?

}

然后

let something = SomeManager.someVariable

阅读 296

收藏
2020-07-07

共1个答案

一尘不染

tl; dr

当您存储可变状态时的选项1(类或结构),因为您需要其他实例。

当您要存储静态变量时,可以使用选项2(作用域全局变量),因为它速度更快且使用的内存更少。

具有变量的Singleton类(或结构)

全球状态通常被认为是“坏事”。很难考虑,会引起问题,但有时是不可避免的。

  • 如果您想拥有多个SomeManager实例,请创建一个类。
  • 单例可以是很好的默认实例,但是在某些情况下,您可能希望具有单独的行为(测试)。
  • 如果SomeManager存储全局状态,则依赖注入…是一个重要的话题。

静态变量

  • 始终为时使用someVariable
  • 不需要额外的存储空间static var sharedManager = SomeManager();您仅使用实际需要的内存。
  • 速度稍快,因为您不需要加载sharedManager到内存中就可以访问它的member someVariable。您直接访问someVariable

奖金提示:

在选项2中,SomeManager即使不执行任何操作,也可以创建。您可以通过SomeManager不使用任何情况的枚举来防止这种情况。

enum SomeManager {
    static var someVariable: String?
}

您仍然可以这样做:

SomeManager.someVariable

但是你做不到

let manager = SomeManger()
2020-07-07