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
    }    
}
  • 這個實現你們應該至關熟悉,這裏就再也不過多介紹了。線程

相關文章
相關標籤/搜索