本帖最后由 swifter 于 2016-10-21 03:39 编辑



刚才在Swift大拇指上发了《Swift 3.0 必看:dynamicType废除,用type(of: )代替》,现在继续。

欢迎订阅我在全球最大的Swift开发者社区——敏捷大拇指Swifthumb.com)上的淘帖专辑《Swift 3.0 必看语法变动》,有更多的Swift 3.0语法变动方面的资料,一旦有更新,就会通知到你。

Swift 3.0 必看:给DispatchQueue扩展实现被废Dispatch once原有功能

Swift 3.0 必看:给DispatchQueue扩展实现被废Dispatch once原有功能 - 敏捷大拇指 - Swift 3.0 必看:给DispatchQueue扩展实现被废Dispatch once原有功能


在Swift 3.0中,原有的Dispatch once已经被废弃了。但是可以通过给DispatchQueue实现一个扩展方法来实现原有的功能。

代码如下:

[Swift] 纯文本查看 复制代码
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(self)
        defer { objc_sync_exit(self) }

        if _onceTracker.contains(token) {
            return
        }

        _onceTracker.append(token)
        block()
    }
}


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

使用的时候可以传token:

[Swift] 纯文本查看 复制代码
DispatchQueue.once(token: "com.vectorform.test") {
    print( "Do This Once!" )
}


或者使用UUID也可以:

[Swift] 纯文本查看 复制代码
private let _onceToken = NSUUID().uuidString

DispatchQueue.once(token: _onceToken) {
    print( "Do This Once!" )
}





相关链接

Dispatch once in Swift 3

Swift 3.0 必看:新增的两种访问控制权限 fileprivate和open

Swift 3.0 必看:集合方法flatten()重命名为joined()

Swift 3.0 必看:typealias支持泛型

Swift 3.0 必看:#selector获取属性的getter和setter方法

Swift 3.0 必看:foundation中数据引用类型改为值类型

Swift 3.0 必看:dynamicType废除,用type(of: )代替

Swift 3.0 必看:给DispatchQueue扩展实现被废Dispatch once原有功能

Swift 3.0 必看:从使用场景了解GCD新API

Swift 3.0 必看:sizeof移进MemoryLayout

Swift 3.0 必看:@noescape走了, @escaping来了

Swift 3.0 必看:Swift中被忽略的@noescape

同时,欢迎订阅我在全球最大的Swift开发者社区——敏捷大拇指Swifthumb.com)上的淘帖专辑《Swift 3.0 必看语法变动》,有更多的Swift 3.0语法变动方面的资料,一旦有更新,就会通知到你。




作者:没故事的卓同学