加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift线程安全的单例实现

发布时间:2020-12-14 07:02:48 所属栏目:百科 来源:网络整理
导读:介绍 单例模式在开发中尤为常见,最大的好处就是内存中只会保留一个对象,节省内存开销,同时便于对象的建立和维护。 一个简单的单例 class Singleton { static let sharedInstance = Singleton() } 这个单例,如此的简单那么他是线程安全的吗?答案是———

介绍

  • 单例模式在开发中尤为常见,最大的好处就是内存中只会保留一个对象,节省内存开销,同时便于对象的建立和维护。

一个简单的单例

class Singleton  {
       static let sharedInstance = Singleton()
    }
  • 这个单例,如此的简单那么他是线程安全的吗?答案是—————是!而且他也是懒加载的!原因很简单,let定义的属性本身就是thread safe的,同时static定义的是一个class constant,拥有全局作用域和懒加载特性。Swift的单例实现是不是简单得令人发指?!(当然这是在Swift1.2才支持的)

  • 如果你是Swift1.2以下的你可以这么写

class Singleton {
    class var shared: Singleton {
            return Inner.instance
    }
 
    struct Inner {
        static let instance: Singleton = Singleton()
    }
}

用GCD来实现线程安全

class Singleton {
    class var shared: Singleton {
        if Static.instance != nil{
            dispatch_once(&Static.onceToken) {
                Static.instance = Singleton()
            }
        }
        return Static.instance!
    }
    struct Static {
        static var instance: Singleton?
        static var onceToken: dispatch_once_t = 0
    }    
}
  • 这个实现大家应该相当熟悉,这里就不再过多介绍了。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读