tl; dr
当您存储可变状态时的选项1(类或结构),因为您需要其他实例。
当您要存储静态变量时,可以使用选项2(作用域全局变量),因为它速度更快且使用的内存更少。
具有变量的Singleton类(或结构)
全球状态通常被认为是“坏事”。很难考虑,会引起问题,但有时是不可避免的。
- 如果您想拥有多个
SomeManager
实例,请创建一个类。 - 单例可以是很好的默认实例,但是在某些情况下,您可能希望具有单独的行为(测试)。
- 如果
SomeManager
存储全局状态,则依赖注入…是一个重要的话题。
静态变量
- 始终为时使用
someVariable
。 - 不需要额外的存储空间
static var sharedManager = SomeManager()
;您仅使用实际需要的内存。 - 速度稍快,因为您不需要加载
sharedManager
到内存中就可以访问它的membersomeVariable
。您直接访问someVariable
。
奖金提示:
在选项2中,
SomeManager即使不执行任何操作,也可以创建。您可以通过
SomeManager不使用任何情况的枚举来防止这种情况。
enum SomeManager { static var someVariable: String?}您仍然可以这样做:
SomeManager.someVariable
但是你做不到
let manager = SomeManger()



