swift - 为什么 Singleton 会捕获自己的一个实例?

标签 swift static singleton

我试图了解当我们在 Singleton 自己的类声明中创建 Singleton 对象的第一个实例时在较低级别发生了什么。

据我了解,static 关键字允许标记的属性或方法在一个类的所有实例之间共享,我确信它在这里扮演着我没有完全看到的角色.

此外,当我们考虑在编译/运行时创建实例时,这是如何工作的?

这是单例类声明的示例:

class Person {
    static let details = Person()
    var name = "Alan Turing"
    let age = "42"
}

我知道类及其属性只会创建一次,并且对类对象的任何引用都将指向内存中的同一点。我的困惑特别在于为什么我们在自身内部创建 Singleton 的第一个实例。

最佳答案

基本上,static 变量是始终可通过类本身访问的类变量。 我建议阅读对 static here 的更深入的解释

通过在包含类本身的对象的类中使用静态变量,您可以确保在运行时已经存在该类的对象(或者至少在访问 Person.instance 时) > 第一次)。 对于 Swift 中真正的 singleton 来说,必须将该类的 init 设为 private,如下所示:


public class Person {
    static let instance = Person()
    var name: String
    let age: Int

    private init() {
        self.name = "Alan Turing"
        self.age = 42
    }
}

这样您就可以确保在任何给定时间确实只有一个对象存在(因此得名 singleton)。

关于swift - 为什么 Singleton 会捕获自己的一个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56578353/

相关文章:

SwiftUI 观察变化

swift - 如何访问枚举中第二部分的第一项?

delphi - 在终结中使用私有(private)方法/var

c++ - 如何使用函数初始化静态常量成员

swift - 在 Swift 中,单例和类的静态版本有什么区别?

ios - 休息套件 RKMappingOperation 不起作用

ios - SwiftUI 应用程序崩溃并出现 "attempt to insert row 2 into section 0, but there are only 2 rows in section 0 after the update"错误

PHP - 静态局部变量

php - Laravel 5.1 单例总是新实例

Java单例对象多语言数据实现