swift--Swift 3.0实战:实现Dispatch once扩展
来源:互联网 发布:电脑网络连接在哪里找 编辑:程序博客网 时间:2024/04/27 05:44
在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(self) defer { objc_sync_exit(self) } if _onceTracker.contains(token) { return } _onceTracker.append(token) 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
原文地址:http://gold.xitu.io/post/57f85ced7db2a20059432c6d?ref=myread
0 0
- swift--Swift 3.0实战:实现Dispatch once扩展
- swift--Swift 3.0实战:资料学习篇
- swift--Swift 3.0实战:迁移程序到 Swift 3.0
- swift--Swift 2.0实战:如何实现从非零下标遍历数组?
- [Swift开发实战]- 类型的扩展
- swift--Swift 3.0实战:和Objective-C的交互需要注意
- swift--Swift 3.0实战:从使用场景了解GCD新API
- swift学习- 扩展(二十一)
- [Swift]扩展
- Swift-扩展
- Swift 扩展
- Swift-扩展
- swift 扩展
- Swift 扩展
- Swift实战
- Swift实战
- Swift实战
- swift扩展UIView实现动画依次执行
- does not specify a android.test.InstrumentationTestRunner instrumentation or does not declare
- 文件管理问题记录点
- 文章标题
- iOS 点击tabBar弹出登录窗口
- android屏幕适配
- swift--Swift 3.0实战:实现Dispatch once扩展
- js拖拽思想
- 2016/10/8 1001. 舞蹈室安排
- nginx+tomcat负载均衡和session复制
- Java中Timer定时器的使用
- java 知识
- 增值你的C++技能,C++成为WEB后台“颜值 ”担当(二)
- 【阿里云-云栖社区】喜欢的记得关注(每日更新)
- Eclipse 安装插件(aptana、svn 、git、Java EE、JSHint)