单例模式需要满足 整个程序的生命周期只能存在一个,所以
- 构造器需要是
private
, 保证外部无法调用构造器 - 线程安全,保证只能有一个线程初始化
目前我发现较为好用的Swift版本单例模式写好如下,像SDWebImage
的Swift版本Kingfisher
也是用下面这种方法初始化它的KingfisherManager
类,然后在这个类里面维护缓存等。
class Singleton {
public static let sharedInstance = Singleton() //
private init() {}
}
- 定义成
let
之后就不能改变 - Swift 对类变量是
lazy
加载,也就是在第一次访问的时候初始化。相当于OC中的dispatch_once
。保证线程安全。