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