單例模式在開發中尤其常見,最大的好處就是內存中只會保留一個對象,節省內存開銷,同時便於對象的創建和維護。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 } }
這個實現你們應該至關熟悉,這裏就再也不過多介紹了。線程