單例就是該類在系統(tǒng)中只有一個(gè)實(shí)例,對(duì)比一下OC的單例創(chuàng)建方式來(lái)看一下Swift的單例是如何寫(xiě)的莫瞬。
OC中的單例是這樣的
+ (instancetype)shareManager
{
static id instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[self alloc] init];
});
return instance;
}
onceToken默認(rèn)等于0, 如果是0就會(huì)執(zhí)行block, 如果不是0就不會(huì)執(zhí)行,通常執(zhí)行完之后就變?yōu)?1
類比一下OC茴厉,Swift中的單例也可以這樣寫(xiě)
方法一
// 在Swift中, 類方法中是不允許定義靜態(tài)變量的
static var once_t: dispatch_once_t = 0
static var instance: Manager?
/// 用于獲取單例對(duì)象的類方法
class func shareManager() -> Manager{
dispatch_once(&once_t) { () -> Void in
instance = Manager()
}
return instance!
}
方法二
Swift中的let是線程安全的凌净,有更簡(jiǎn)單創(chuàng)建單例的方法,這種方法更推薦斧吐。
static let instance: Manager = Manager()
class func shareManager() -> Manager {
return instance
}