swift--Swift 3.0实战:实现Dispatch once扩展
2016-10-08 17:52
337 查看
在3中原有的Dispatch once已经被废弃了。但是可以通过给DispatchQueue实现一个扩展方法来实现原有的功能。 代码如下:
使用字符串token作为once的ID,执行once的时候加了一个锁,避免多线程下的token判断不准确的问题。 使用的时候可以传token
或者使用UUID也可以:
相关链接: Dispatch once in Swift 3
原文地址:http://gold.xitu.io/post/57f85ced7db2a20059432c6d?ref=myread
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().uuidString DispatchQueue.once(token: _onceToken) { print( "Do This Once!" ) }
相关链接: Dispatch once in Swift 3
原文地址:http://gold.xitu.io/post/57f85ced7db2a20059432c6d?ref=myread
相关文章推荐
- 几个常用的Swift Extension:防止按钮重复点击、增加友盟页面统计、Dispatch_once Swift实现
- C# 3.0实现类本身的方法扩展
- dispatch_once 实现单例
- Swift之dispatch_source实现多线程定时关闭功能
- iOS项目开发实战——Swift实现多个TableView的侧滑与切换
- iOS开发项目实战——Swift实现ScrollView滚动条功能
- .net 3.0+关于实现IEnumerable的类型的扩展方法的使用一
- Swift - 多线程实现方式(3) - Grand Central Dispatch(GCD)
- [.NET领域驱动设计实战系列]专题十:DDD扩展内容:全面剖析CQRS模式实现
- dispatch_once 实现单例
- (一二三)基于GCD的dispatch_once实现单例设计
- 一步一步实战扩展 ASP.NET Route,实现小写 URL、个性化 URL
- Swift游戏实战-跑酷熊猫 13 二段跳的实现
- dispatch_once的实现分析
- [Objective-C] 用 dispatch_once 实现单例
- WF4.0实战(五):实现一个直观易扩展的自动测试框架
- dispatch_once的实现分析
- Swift实现糗事百科Demo(实战项目)
- dispatch_once实现分析
- 使用dispatch_once实现单例模式