Swift中的dispatch_once 单例模式

以下有三种方法实现单例模式,支持懒初始化和线程安全

* 全局变量
* 结构
* dispatch_once

全局变量:

这里使用了全局变量而非类变量,是因为不支持类变量

private let _SingletonSharedInstance = Singleton()

class Singleton  {
    class var sharedInstance : Singleton {
        return _SingletonSharedInstance
    }
}

结构:

与类不同,结构可以定义静态变量,通过使用此方法,将静态变量升级为类变量(在支持类变量之前,推荐此方法)

class Singleton {
    class var sharedInstance : Singleton {
        struct Static {
            static let instance : Singleton = Singleton()
        }
        return Static.instance
    }
}

dispatch_once:

传统的OC方法对Swift的接口

class Singleton {
    class var sharedInstance : Singleton {
        struct Static {
            static var onceToken : dispatch_once_t = 0
            static var instance : Singleton? = nil
        }
        dispatch_once(&Static.onceToken) {
            Static.instance = Singleton()
        }
        return Static.instance!
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在之前的帖子里聊过状态管理有多痛苦,有时这是不可避免的。一个状态管理的例子大家都很熟悉,那就是单例。使用Swift...
    Tank丶Farmer阅读 6,414评论 0 5
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,255评论 4 61
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,217评论 30 472
  • 山本文绪的书是当当活动价时候冲着广告语打包买的,印象很好,远的想起来苏青,近的想起来亦舒。 和大部分同龄人不一样的...
    止末阅读 684评论 0 4
  • 他从一出生就能看到鬼魂,小时候他不知道那是鬼魂,直到长大一些,才慢慢意识到,有些“人”,别人看不见他们,再后来他才...
    偷打火机的普罗米修斯阅读 1,835评论 5 25