一. 單例模式簡(jiǎn)介
單例模式的作用
可以保證在程序運(yùn)行過(guò)程,一個(gè)類只有一個(gè)實(shí)例,而且該實(shí)例易于供外界訪問(wèn)
從而方便地控制了實(shí)例個(gè)數(shù),并節(jié)約系統(tǒng)資源
單例模式的使用場(chǎng)合
在整個(gè)應(yīng)用程序中,共享一份資源(這份資源只需要?jiǎng)?chuàng)建初始化1次),一般用于工具類。例如:登陸控制器,網(wǎng)絡(luò)數(shù)據(jù)請(qǐng)求,音樂(lè)播放器等一個(gè)工程需要使用多次的控制器或方法。
單例模式的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
單例模式可以保證系統(tǒng)中一個(gè)類只有一個(gè)實(shí)例而且該實(shí)例易于外界訪問(wèn),從而方便對(duì)實(shí)例個(gè)數(shù)的控制并節(jié)約系統(tǒng)資源。
如果希望在系統(tǒng)中某個(gè)類的對(duì)象只能存在一個(gè),單例模式是最好的解決方案。
單例模式因?yàn)轭惪刂屏藢?shí)例化過(guò)程,所以類可以更加靈活修改實(shí)例化過(guò)程。
缺點(diǎn):
單例對(duì)象一旦建立,對(duì)象指針是保存在靜態(tài)區(qū)的,單例對(duì)象在堆中分配的內(nèi)存空間,會(huì)在應(yīng)用程序終止后才會(huì)被釋放。
單例類無(wú)法繼承,因此很難進(jìn)行類的擴(kuò)展。
單例不適用于變化的對(duì)象,如果同一類型的對(duì)象總是要在不同的用例場(chǎng)景發(fā)生變化,單例就會(huì)引起數(shù)據(jù)的錯(cuò)誤,不能保存彼此的狀態(tài)。
注意:我們?cè)谑褂脝卫愔?,一定要考慮好單例類是否適合和類以后的擴(kuò)展性,避免盲目濫用單例
二. 單例在ARC中的實(shí)現(xiàn)
ARC中單例實(shí)現(xiàn)步驟
1 在類的內(nèi)部提供一個(gè)static修飾的全局變量
2 提供一個(gè)類方法,方便外界訪問(wèn)
3 重寫+allocWithZone方法,保證永遠(yuǎn)都只為單例對(duì)象分配一次內(nèi)存空間
4 嚴(yán)謹(jǐn)起見(jiàn),重寫-copyWithZone方法和-MutableCopyWithZone方法
