概述
整個應用生命周期中糜芳,只存在唯一一個實例對象的類被稱作單例,所以的模塊共同使用這一個對象的設計叫做單例模式
單例模式的特點和創(chuàng)建方式:
- 實例對象唯一或杠,所以多個模塊共同使用保證了數(shù)據(jù)唯一性掖鱼。
- 有較強的靈活性。
- final關鍵字修飾的class乍狐、var、func標示不可被操作固逗,繼承浅蚪,重寫非常適合優(yōu)化單例。
- Swift3.0開始放棄了dispatch_once烫罩,創(chuàng)建單例方式有:
final class LLNetwork: NSObject {
static let shareInstace = LLNetwork.init()
// 保證只有當前才能訪問
private override init(){}
}
OC單例
- 方法一
+ (nonnull instancetype)sharedInstance {
static id instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[self alloc] init];
});
return instance;
}
- 方法二
+ (nonnull instancetype)sharedInstance {
static id instance = nil;
@synchronized (self) { //保證線程安全
if (!instance) {
instance = [[self alloc] init];
}
}
return instance;
}
總結
單例保證了數(shù)據(jù)在應用運行期間的唯一性惜傲,減少了重復內(nèi)存的損耗,如果單例本身內(nèi)存占用過大時贝攒,要重新考慮這個模式是否適合了盗誊。另一方面,單例的訪問也存在著多線程安全的問題,這需要我們合理的使用線程鎖來保證單例的安全性了哈踱。