swift中使用dispatch_once

2018-09-27  本文已影响54人  番茄炒西红柿啊
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扩展

上一篇 下一篇

猜你喜欢

热点阅读