Swift线程安全的单例实现

介绍

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

一个简单的单例

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

  • 若是你是Swift1.2如下的你能够这么写spa

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
    }    
}
  • 这个实现你们应该至关熟悉,这里就再也不过多介绍了。线程

相关文章
相关标签/搜索