項(xiàng)目開發(fā)中往往經(jīng)常使用單例模式,單例的目的:
- 內(nèi)存中只有一個(gè)對(duì)象實(shí)例
- 提供一個(gè)全局訪問點(diǎn)
OC 中的單例寫法
+ (instancetype)sharedManager {
static id instance;
static dispatch_once_t onceToken;
NSLog(@"%ld", onceToken);
//onceToken默認(rèn)等于0檩小,如果是0就會(huì)執(zhí)行block鳄炉,如果不是0就不會(huì)執(zhí)行
dispatch_once(&onceToken, ^{
instance = [[self alloc] init];
});
return instance;
}
Swift 中的單例
static var instance: NetworkTools?
static var token: dispatch_once_t = 0
/// 在 swift 中類變量不能是存儲(chǔ)型變量
class var sharedNetworkTools: NetworkTools {
dispatch_once(&token, { () -> Void in
self.instance = NetworkTools()
})
return self.instance!
}
不過杜耙!在 Swift 中 let 本身就是線程安全的
改進(jìn)過的單例代碼
private static let instance = NetworkTools()
/// 在 swift 中類變量不能是存儲(chǔ)型變量
class var sharedNetworkTools: NetworkTools {
return instance
}