当前位置: 首页 > 面试题库 >

Singleton VS静态(类)变量

洪季萌
2023-03-14
问题内容

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

问题答案:

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()


 类似资料:
  • rank ▲ ✰ vote url 26 568 149 609 url 类里的静态变量 有可能在python中类有静态变量或方法?用什么语法实现? 变量是在类定义时声明的,不是在类方法或静态变量中: >>> class MyClass: ... i = 3 ... >>> MyClass.i 3 上面的"i"变量是类级别的,所以它是和所有实体级的"i"变量是不一样的,你可以: >>>

  • 问题内容: 我已经定义了一个对象并声明了一个静态变量。在该方法中,当我尝试打印实例和类变量时,两者都打印相同的值。 不是实例变量吗?它应该打印0而不是50吗? 问题答案: 不,只有一个变量-您尚未声明任何实例变量。 不幸的是,Java允许您访问静态成员,就像通过相关类型的引用访问静态成员一样。这是IMO的设计缺陷,某些IDE(例如Eclipse)允许您将其标记为警告或错误- 但这是语言的一部分。您

  • 本文向大家介绍C++之类的静态变量,包括了C++之类的静态变量的使用技巧和注意事项,需要的朋友参考一下 成员变量 通过对象名能够访问public成员变量 每个对象都可以有只属于自己的成员变量 成员变量不能在对象之间共享 类的静态成员 静态成员变量 存储在 全局数据区 以上所述就是本文的全部内容了,希望大家能够喜欢。

  • 静态变量 PHP中局部变量分配在zend_execute_data结构上,每次执行zend_op_array都会生成一个新的zend_execute_data,局部变量在执行之初分配,然后在执行结束时释放,这是局部变量的生命周期,而局部变量中有一种特殊的类型:静态变量,它们不会在函数执行完后释放,当程序执行离开函数域时静态变量的值被保留下来,下次执行时仍然可以使用之前的值。 PHP中的静态变量通过

  • 问题内容: 我有以下类别,将其用作项目中所有模型的基础: 然后,我尝试通过以下方式对其进行扩展: 但是,如果我尝试执行以下操作: 然后,而不是查询:,它生成查询:“从空WHERE id =?中选择SELECT ID”。因此,覆盖类中的字段似乎没有任何效果。 我该如何克服呢?如果我在BaseModel中添加了一个方法,并在的构造函数中对其进行了调用,那么该类的所有方法都可以使用的新值吗? 问题答案:

  • 问题内容: 我有六个类,它们都扩展了相同的抽象类。抽象类具有一个静态变量,该静态变量指向一些JNI代码,我只希望在每个类实例化时加载一次。 据我了解,这将导致实例化此静态变量的一个实例,但是我想要的是每个扩展类都具有自己的变量静态实例,该实例对于给定的子类是唯一的。我想在我的抽象类中编写一些代码来修改和/或释放该抽象类。是否可以同时执行这两项操作? 例如,我可以编写一个抽象类栏,其中包含变量foo