Swift单例模式
来源:互联网 发布:网络制造 编辑:程序博客网 时间:2024/06/07 09:17
Swift单例模式
单例模式
单例模式的作用是解决“应用中只有一个实例”的一类问题。在Cocoa Touch框架中,有UIApplication、NSUserDefaults和NSNotificationCenter等单例类。另外,NSFileManager和NSBundle类虽然属于Cocoa框架的内容,但也可以在Cocoa Touch框架中使用(Cocoa框架中的单例类有NSFileManager、NSWorkspace和NSApplication等)。
很多人都熟悉OC的单例创建的方式,使用NSLock、@synchronized等锁,所用GCD的dispatch-once创建等..
但是Swift作为一个新的语言,跟OC的区别还是蛮大的,
那么怎么私用Swift创建一个单例呢?
单例模式的实现有很多方案,苹果公司在《UsingSwift with Cocoa and Objective-C》官方文档中给出了一种单例模式的实现。最简单形式代码如下:
class Singleton { static let sharedInstance = Singleton() }
是的就是这么简单,上述代码采用static的类属性实现单例模式,这种类属性只被延迟加载执行一次,即便是在多线程情况下也只是执行一次,并且保证是线程安全的。
当然这里使用了全局变量而非类变量,是因为不支持类变量
与类不同,结构可以定义静态变量,通过使用此方法,将静态变量升级为类变量(在支持类变量之前,推荐此方法)
class Singleton { class var sharedInstance : Singleton { struct Static { static let instance : Singleton = Singleton() } return Static.instance }}
如果我们想要有更多的初始化,我么也可以使用闭包的形式创建
class Singleton { static let sharedInstance: Singleton = { let instance = Singleton() // 初始化处理 return instance }() }
当然很多人会想到dispatch-once,因为OC这样的创建方式已经习惯了,
class Singleton { class var sharedInstance : Singleton { struct Static { static var onceToken : dispatch_once_t = 0 static var instance : Singleton? = nil } dispatch_once(&Static.onceToken) { Static.instance = Singleton() } return Static.instance! }}
但是Swift3.0取消了once的实现,
所以我们只能自己来实现.
extension DispatchQueue { private static var _onceTracker = [String]() 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() }}
那么我们创建的方式一样可以使用once
class Singleton { class var sharedInstance : Singleton { struct Static { static var onceToken = NSUUID().uuidString//可以自定一个值...... static var instance : Singleton? = nil } DispatchQueue.once(Static.onceToken) { Static.instance = Singleton() } return Static.instance! } }
当然单例模式的创建,我只是列举了几个例子,至于在应用中如何使用,使用哪一个,可以根据需求来定….
欢迎访问我的系列博客
系列:iOS开发-前言+大纲
http://blog.csdn.net/spicyShrimp/article/details/62218521
- swift 单例模式
- swift 单例模式
- swift单例模式
- Swift单例模式
- Swift实现单例模式
- Swift 的单例模式
- swift之单例模式
- Swift之单例模式
- swift实现单例模式
- Swift中的单例模式
- Swift - 实现单例模式
- Swift实现单例模式
- Swift设计模式之单例模式
- OC语言单例模式与Swift单例模式
- swift语言实现单例模式
- Swift实现OC中的单例模式
- Swift设计模式之单例(SINGLETON)
- iOS Swift-单例模式
- shell脚本删除旧日志文档
- 水印融合到jsp代码
- bash shell 文件比较运算符
- Bash和Ksh中的重定向
- 挂载Windows共享到Linux目录下
- Swift单例模式
- 关于Linux下关于“peth0”的东东
- MAVEN解决JDK配置和包的引入顺序问题
- ESX4.0 Recreating a missing virtual disk (VMDK) header/descriptor file
- 浅出ES6特性
- 使用git上传资源到GitHub(适用于新手)
- ESX4.0 host boot stops at the error: VSD mount/Bin/SH:cant access TTY job control turned off
- PCRE中元字符及其在正则表达式
- Nginx中的正则表达式