单例模式在开发中尤其常见,最大的好处就是内存中只会保留一个对象,节省内存开销,同时便于对象的创建和维护。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() } }
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 } }
这个实现你们应该至关熟悉,这里就再也不过多介绍了。线程