总结下:
单例模式需要满足三个规则:
(1)单例是独一无二的,在程序的整个生命周期内,只能存在一个实例。单例的存在使我们可以全局访问到它。
(2)为了保证单例的唯一性,它的初始化是需要私有的。
(3)为了在整个生命周期内唯存这个单例,需要保证它是线程安全的。即通过调用dispatch_once,即可保证实例化代码只运行一次。
代码:
1、
class TheOneAndOnlyKraken {
class var sharedInstance: TheOneAndOnlyKraken {
struct Static {
static var onceToken: dispatch_once_t = 0
static var instance: TheOneAndOnlyKraken? = nil
}
dispatch_once(&Static.onceToken) {
Static.instance = TheOneAndOnlyKraken()
}
return Static.instance!
}
}
2、结构体方法:
class TheOneAndOnlyKraken {
class var sharedInstance: TheOneAndOnlyKraken {
struct Static {
static let instance = TheOneAndOnlyKraken()
}
return Static.instance
}
}
3、全局变量法:
private let sharedKraken = TheOneAndOnlyKraken()
class TheOneAndOnlyKraken {
class var sharedInstance: TheOneAndOnlyKraken {
return sharedKraken
}
}
由全局变量法,文章作者想到单行单例法:
class TheOneAndOnlyKraken {
static let sharedInstance = TheOneAndOnlyKraken()
private init() {} //This prevents others from using the default '()' initializer for this class.
}
很简洁。