swift中使用dispatch_once

  • 在Swift 3.0中原有的Dispatch once已經被廢棄了.
  • 我們可以通過給DispatchQueue實現一個擴展方法來實現原有的功能:
extension DispatchQueue {
    private static var _onceToken = [String]()
    
    class func once(token: String = "\(#file):\(#function):\(#line)", block: ()->Void) {
        objc_sync_enter(self)
        
        defer
        {
            objc_sync_exit(self)
        }

        if _onceToken.contains(token)
        {
            return
        }

        _onceToken.append(token)
        block()
    }
}

// 使用
DispatchQueue.once {
  // your code
}
        
DispatchQueue.once(token: "identify") {
   // your code
 }

參考: Swift 3.0之后實現Dispatch once擴展

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容