介绍
单例模式在开发中尤为常见,最大的好处就是内存中只会保留一个对象,节省内存开销,同时便于对象的建立和维护。
一个简单的单例
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
}
}
这个实现大家应该相当熟悉,这里就不再过多介绍了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。