單例寫法
在OC中,我們通常是採用dispatch_once
函式來幫助我們實現單例。dispatch_once
可以保證馬上執行函式並且執行緒安全。
+ (instancetype)sharedInstance {
static id _instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [[self alloc] init];
});
return _instance;
}
複製程式碼
在Swift中,可以使用static
來修飾一個型別屬性,這樣的話保證了只會進行一次的延遲例項化並且是執行緒安全的。
class Singleton {
static let sharedInstance = Singleton()
}
複製程式碼
如果你想要在初始化的時候設定其他屬性的話,也可以使用下面的方法
class Singleton {
static let sharedInstance: Singleton = {
let instance = Singleton()
// setup code
return instance
}()
}
複製程式碼
參考連結: