Swift多种实现单例写法
发布时间:2020-12-14 01:47:46 所属栏目:百科 来源:网络整理
导读:学习Swift的单例写法,以下提供了5种方式,一起来看看吧! 1、非线程安全的类属性嵌套方式 class JackyBlog { // 类属性使用class声明,声明为只读属性 class var sharedInstance : JackyBlog { get { // 嵌套一个结构体 struct JackyBlogSingleton { static
学习Swift的单例写法,以下提供了5种方式,一起来看看吧! 1、非线程安全的类属性嵌套方式 class JackyBlog {
// 类属性使用class声明,声明为只读属性
class var sharedInstance: JackyBlog {
get {
// 嵌套一个结构体
struct JackyBlogSingleton {
static var singleton: JackyBlog?
}
guard JackyBlogSingleton.singleton == nil else {
return JackyBlogSingleton.singleton!
}
JackyBlogSingleton.singleton = JackyBlog()
return JackyBlogSingleton.singleton!
}
}
}
2、线程安全的类属性嵌套方式 class JackyBlog {
// 类属性使用class声明,声明为只读属性
class var sharedInstance: JackyBlog {
get {
// 嵌套一个结构体
struct JackyBlogSingleton {
static var singleton: JackyBlog? = nil
static var onceToken: dispatch_once_t = 0
}
guard JackyBlogSingleton.singleton == nil else {
return JackyBlogSingleton.singleton!
}
// 加上线程安全处理
dispatch_once(&JackyBlogSingleton.onceToken) { () -> Void in
JackyBlogSingleton.singleton = JackyBlog()
}
return JackyBlogSingleton.singleton!
}
}
}
3、全局常量模式 let g_singletonSharedInstance = JackyBlog()
class JackyBlog {
class var sharedInstance: JackyBlog {
return g_singletonSharedInstance
}
}
4、静态常量模式 class JackyBlog {
// 表态,使用let声明是纯种安全的
static let sharedInstance = JackyBlog()
}
5、使用类方式模式(推荐) class JackyBlog {
class func sharedInstance() ->JackyBlog {
struct Singleton {
static var onceToken: dispatch_once_t = 0
static var singleton: JackyBlog? = nil
}
dispatch_once(&Singleton.onceToken) { () -> Void in
Singleton.singleton = JackyBlog()
}
return Singleton.singleton!
}
}
转自:Swift单例写法 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |