IOS Swift3 四种单例模式详解及实例
程序员文章站
2024-02-18 20:38:58
swift3 单例模式
常见的有这么几种方法
第一种简单到爆的
final class single: nsobject {
static l...
swift3 单例模式
常见的有这么几种方法
第一种简单到爆的
final class single: nsobject { static let shared = single() private override init() {} }
final关键字的作用是这个类或方法不希望被继承和重写
第二种
public extension dispatchqueue { private static var oncetoken = [string]() public class func once(_ token: string, _ block: () -> void) { objc_sync_enter(self) defer { objc_sync_exit(self) } if oncetoken.contains(token) { return } oncetoken.append(token) block() } } final class single2: nsobject { static func shared() -> single2 { struct singleton { static var single: single2? } dispatchqueue.once(nsuuid().uuidstring) { singleton.single = shared() } return singleton.single! } }
第二种完全是oc风格的单例,但是由于swift3中废弃了原来的dispatch_once_t,所以需要先给dispatchqueue添加一个extension,实现原先的dispatch_once_t效果
第三种
private let single = single3() final class single3: nsobject { static var shared: single3 { return single } }
由于swift3中加强了权限控制,导致如果重写private override init()方法会报错,所以这种写法在swift3中的安全性未知。
第四种
final class single4: nsobject { static var shared: single4 { struct static { static let instance: single4 = single4() } return static.instance } private override init() {} }
在方法内定义静态变量
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
上一篇: IOS10 远程推送适配详细介绍
下一篇: 解决iOS调起微信支付显示系统繁忙问题