韦德国际bv1946_www.bv1946com_韦德国际1946手机版
做最好的网站

使用字符串token作为once的ID

日期:2020-05-06编辑作者:韦德国际bv1946计算机

在3中原有的Dispatch once已经被废弃了。但是可以通过给DispatchQueue实现一个扩展方法来实现原有的功能。代码如下:

public extension DispatchQueue { private static var _onceTracker = [String]() /** Executes a block of code, associated with a unique token, only once. The code is thread safe and will only execute the code once even in the presence of multithreaded calls. - parameter token: A unique reverse DNS style name such as com.vectorform.<name> or a GUID - parameter block: Block to execute once */ public class func once(token: String, block:()->Void) { objc_sync_enter defer { objc_sync_exit } if _onceTracker.contains { return } _onceTracker.append block() }}

使用字符串token作为once的ID,执行once的时候加了一个锁,避免多线程下的token判断不准确的问题。使用的时候可以传token

DispatchQueue.once(token: "com.vectorform.test") { print( "Do This Once!" )}

或者使用UUID也可以:

private let _onceToken = NSUUID().uuidStringDispatchQueue.once(token: _onceToken) { print( "Do This Once!" )}

欢迎关注我的微博:@没故事的卓同学

相关链接:Dispatch once in Swift 3

本文由韦德国际bv1946手机版发布于韦德国际bv1946计算机,转载请注明出处:使用字符串token作为once的ID

关键词: Swift Dispatch

遇到问题就跃跃欲试分析一下背后的实现原理.

这次不以规律解释行为, 而从源码窥视规律. 在Swift中的动与静一文中, 我详细的介绍了 Swift 中不同场景下方法的派发...

详细>>

但是并没有按照 Swift 的标准来写 Swift 的项目

让我们来思考一个问题,就是 Swift 的核心是什么? 不知道大家有没有看过 WWDC 2015 的视频,其中有一个编号为 408的视...

详细>>

红旗Linux6.0 下成功安装PS模拟器

今天终于在红旗Linux6.0(dell随机赠送的oem版)里成功的装上了PS模拟器,具体步骤如下: 1)先下载如下软件包 A)epsxe...

详细>>