Swfit学习

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.png

2.为什要把init() 方法设为private

必须保证init方法的私有性,只有这样,才能保证单例是真正唯一的,避免外部对象通过访问init方法创建单例类的其他实例。由于Swift中的所有对象都是由公共的初始化方法创建的,我们需要重写自己的init方法,并设置其为私有的。这很简单,而且不会破坏到我们优雅的单行单例方法。

3.单例模式的线程读取安全问题

由于单例是全局的,可以在多个地方同时调用。

如果多个线程同时调用单例某个属性的set和get方法,可能会get到一个错误值,这个时候应该如何处理呢?

方法:1.使用同步队列
2.使用异步队列
3.使用栅栏函数

最后给大家推荐个不错的公众号 "说神码",或者大家可以扫描下面的二维码关注


qrcode_for_gh_3b0177133bdb_258.jpg
上一篇 下一篇

猜你喜欢

热点阅读