Swift Singleton Theory

在OC中我们经常这样写单例:

@implemention MyManager 

+ (id)sharedManager {

    static MyManager *shareInstance = nil;

    static dispatch_once_t onceToken;

    dispatch_once(&onceTokec, ^{

        shareInstance = [[self alloc]  init];

    });

    return shareInstance;

}

使用dispatch_once_t来保证单例代码在生命周期内只被调用一次。

然而在Swift中,如下方式是最佳的单例实现方式:

private let  sharedInstance = MyManager()

为什么简单的一个全局变量就可行呢?如何保证只调用了一次没有冲突呢?

The lazy initializer for a global variable (also for static members of structs and enums) is run the first time that global is accessed, and is launched as dispatch_once to make sure that the initialization is atomic. This enables a cool way to use dispatch_once in your code: just declare a global variable with an initializer and mark it private.

Swift中的全局变量在初始化的时候都会使用 dispatch_once来保证原子性。所以Swift天生支持单例模式,简单方便。


developer.apple.com/swift/blog/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在之前的帖子里聊过状态管理有多痛苦,有时这是不可避免的。一个状态管理的例子大家都很熟悉,那就是单例。使用Swift...
    TomatosX阅读 1,053评论 0 1
  • 董沛沛 洛阳 焦点讲师班三期 坚持原创分享第113天 当看到孩子的伙伴们都已经学会了某种技能,自己还没学会的时候,...
    缘源流长阅读 170评论 0 0
  • 最近一则新闻,由于丈夫的一句指责: 你不上班,在家连孩子都看不好。年轻妈妈遂将5个月大的宝宝扔下楼,再自杀...
    十洲之遥阅读 317评论 1 2