單例模式優(yōu)點(diǎn)
單例模式在內(nèi)存中只有一個(gè)實(shí)例,減少了內(nèi)存開支沟堡。特別是一個(gè)對(duì)象需要頻繁的創(chuàng)建、銷毀時(shí)矢空,而創(chuàng)建與銷毀的性能有無(wú)法優(yōu)化航罗,單例模式的優(yōu)勢(shì)就非常明顯。
單例模式只生成一個(gè)實(shí)例屁药,減少了系統(tǒng)性能開銷粥血,當(dāng)一個(gè)對(duì)象的產(chǎn)生需要比較多的資源時(shí),如讀取配置者祖、產(chǎn)生其他依賴對(duì)象時(shí)立莉,則可以通過(guò)在應(yīng)用啟動(dòng)時(shí)直接產(chǎn)生一個(gè)單例對(duì)象,然后永久駐留內(nèi)存的方式來(lái)解決七问。
單例模式可以避免對(duì)資源的多重占用蜓耻。
單例模式可以在系統(tǒng)設(shè)置全局的訪問點(diǎn),優(yōu)化和共享資源訪問械巡。
單例模式缺點(diǎn)
單例模式一般沒有接口刹淌,擴(kuò)展很困難,除了修改代碼基本上沒有第二種途徑實(shí)現(xiàn)讥耗。
單例模式對(duì)測(cè)試是不利的有勾。在并行開發(fā)環(huán)境中,如果單例模式?jīng)]有完成古程,是不能進(jìn)行測(cè)試的蔼卡。
單例模式與單一職責(zé)原則有沖突。
單例模式在iOS中的使用
單例模式在iOS開發(fā)中的使用還是蠻多的挣磨,許多Foundation雇逞、Cocoa和UIKit中的類都實(shí)現(xiàn)了單例模式荤懂,比如應(yīng)用程序本身UIApplication岖免、文件操作類NSFileManager扎即、消息中心NSNotificitonCenter等系統(tǒng)都已經(jīng)給我們實(shí)現(xiàn)單例郑藏,我們只需要使用就好了仅财。在iOS中使用單例模式要使用類方法,通過(guò)類方法返回該類的唯一對(duì)象再菊。
具體實(shí)現(xiàn)
在.h文件中
+(UserInfoModel *)sharedInstance; 聲明方法
.m文件中實(shí)現(xiàn)方法
+ (UserInfoModel *)sharedInstance
{
static UserInfoModel *instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[UserInfoModel alloc]init];
});
return instance;
}
調(diào)用類中每次實(shí)例化都會(huì)指向一個(gè)固定的 內(nèi)存地址
UserInfoModel*model =? [UserInfoModel sharedInstance];