Swift3 单例模式
发布时间:2020-12-14 06:37:00 所属栏目:百科 来源:网络整理
导读:常见的有这么几种方法 第一种最简单也是最常用的,这里的所有单例init方法一定要定义成private的,不然外部依然可以使用init方法初始化变量。 final class Single: NSObject { static let shared = Single() private override init() {}} final关键字 的作用
常见的有这么几种方法 第一种最简单也是最常用的,这里的所有单例init方法一定要定义成private的,不然外部依然可以使用init方法初始化变量。
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:@escaping () -> 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("YouShaoduo") { Singleton.single = shared() } return Singleton.single } private override init() {} }第二种完全是OC风格的单例,但是由于Swift3中废弃了原来的dispatch_once_t,所以需要先给DispatchQueue添加一个extension,实现原先的 dispatch_once_t效果
第三种 private let single = Single3() final class Single3: NSObject { static var shared: Single3 { return single } fileprivate override init() {} }
第四种
final class Single4: NSObject { static var shared: Single4 { struct Static { static let instance: Single4 = Single4() } return Static.instance } private override init() {} }在方法内定义静态变量 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何在Xcode 4中将视图转换为横向模式
- ruby-on-rails-3 – 模拟关闭/重新打开黄瓜/水豚的浏览器?
- sqlplus连接oracle12c集群报错:ORA-12537: TNS:connection
- 一定能看懂!图解常见的正则表达式
- [ReactNative集成CodePush教程][三] 集成Code Push的案例说
- WPF 依赖属性 DependencyProperty
- [Swift Weekly Contest 122]LeetCode985. 查询后的偶数和 |
- cocos2dx 3.3 Label对指定字符设置颜色
- Ajax POST请求获取后台返回的数据
- 关于AJAX跨域调用ASP.NET MVC或者WebAPI服务的问题及解决方