在OC中我們經(jīng)常這樣寫單例:
@implemention MyManager?
+ (id)sharedManager {
? ? static MyManager *shareInstance = nil;
? ? static dispatch_once_t onceToken;
? ? dispatch_once(&onceTokec, ^{
? ? ? ? shareInstance = [[self alloc] ?init];
? ? });
? ? return shareInstance;
}
使用dispatch_once_t來保證單例代碼在生命周期內(nèi)只被調(diào)用一次帮辟。
然而在Swift中播急,如下方式是最佳的單例實(shí)現(xiàn)方式:
private let ?sharedInstance = MyManager()
為什么簡單的一個(gè)全局變量就可行呢?如何保證只調(diào)用了一次沒有沖突呢隙弛?
The lazy initializer for a global variable (also for static members of structs and enums) is run the first time that global is accessed, and is launched as dispatch_once to make sure that the initialization is atomic. This enables a cool way to use dispatch_once in your code: just declare a global variable with an initializer and mark it private.
Swift中的全局變量在初始化的時(shí)候都會(huì)使用 dispatch_once來保證原子性蔬充。所以Swift天生支持單例模式亭罪,簡單方便弧蝇。