我试图了解当我们在 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/