Swift 单例
2018-08-08 本文已影响19人
山_里_娃
OC中单例的实现:
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
});
Swift 单例的实现:
1.设置一个静态实例变量
2.初始化方法设为私有
class Singleton {
static let sharedInstance = Singleton()
private init(){
}
}
注意:
1.Apple 文档指出:全局变量和结构体/枚举体的静态成员是支持”dispatch_once”特性的
image.png2.为什要把init() 方法设为private
必须保证init方法的私有性,只有这样,才能保证单例是真正唯一的,避免外部对象通过访问init方法创建单例类的其他实例。由于Swift中的所有对象都是由公共的初始化方法创建的,我们需要重写自己的init方法,并设置其为私有的。这很简单,而且不会破坏到我们优雅的单行单例方法。
3.单例模式的线程读取安全问题
由于单例是全局的,可以在多个地方同时调用。
如果多个线程同时调用单例某个属性的set和get方法,可能会get到一个错误值,这个时候应该如何处理呢?
方法:1.使用同步队列
2.使用异步队列
3.使用栅栏函数
最后给大家推荐个不错的公众号 "说神码",或者大家可以扫描下面的二维码关注
qrcode_for_gh_3b0177133bdb_258.jpg