/*
單例模式的優(yōu)點(diǎn):
單例模式在內(nèi)存中只有一個(gè)實(shí)例,減少了內(nèi)存開(kāi)支。特別是一個(gè)對(duì)象需要頻繁的創(chuàng)建、銷(xiāo)毀時(shí),而創(chuàng)建與銷(xiāo)毀的性能又無(wú)法優(yōu)化,單例模式的優(yōu)勢(shì)就非常明顯。
單例模式只生成一個(gè)實(shí)例,減少了系統(tǒng)性能開(kāi)銷(xiāo),當(dāng)一個(gè)對(duì)象的產(chǎn)生需要比較多的資源時(shí),如讀取配置、產(chǎn)生其他依賴(lài)對(duì)象時(shí),則可以通過(guò)在應(yīng)用啟動(dòng)時(shí)直接產(chǎn)生一個(gè)單例對(duì)象,然后永久駐留內(nèi)存的方式來(lái)解決。
單例模式可以避免對(duì)資源的多重占用。
單例模式可以在系統(tǒng)設(shè)置全局的訪問(wèn)點(diǎn),優(yōu)化和共享資源訪問(wèn)。
單例模式的缺點(diǎn):
單例模式一般沒(méi)有接口,擴(kuò)展很困難,除了修改代碼基本上沒(méi)有第二種途徑實(shí)現(xiàn)。
單例模式對(duì)測(cè)試是不利的。在并行開(kāi)發(fā)環(huán)境中,如果單例模式?jīng)]有完成,是不能進(jìn)行測(cè)試的。
單例模式與單一職責(zé)原則有沖突。*/
//1.靜態(tài)變量
static ?WZTool ?* _instance;
//2.+alloc方法內(nèi)部會(huì)調(diào)用allocWithZone方法,重寫(xiě)該方法控制永遠(yuǎn)只分配一次空間
+ ?(instancetype) ?allocWithZone: ?(struct_NSZone*) ?zone
{
static ?dispatch_once_tonceToken;
dispatch_once(&onceToken, ^{
_instance = [super ?allocWithZone:zone];
});
return ?_instance;
}
//3.提供類(lèi)方法,方便外界訪問(wèn),表明身份,說(shuō)明這是一個(gè)單例,注意點(diǎn):規(guī)范share+類(lèi)名|default+類(lèi)名|類(lèi)名
+(instancetype)shareTool
{
return [[self alloc]init];
}
//4.重寫(xiě)copy和mutableCopy方法確保永遠(yuǎn)只有一個(gè)實(shí)例對(duì)象
-(id)copyWithZone:(NSZone*)zone
{
return_instance;
}
-(id)mutableCopyWithZone:(NSZone*)zone
{
return_instance;
}