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