//聯(lián)系人:石虎?QQ:1224614774?昵稱:嗡嘛呢叭咪哄
一挎狸、概念
? ?單例模式(Singleton)也叫單態(tài)模式,是設(shè)計模式中最為簡單的一種模式
1.單例的作用
整個應(yīng)用或系統(tǒng)只能有該類的一個實例兢孝,即是在整個項目中缩幸,這個類的對象只能被初始化一次。單例類保證了應(yīng)用程序的生命周期中有且僅有一個該類的實例對象屯仗,而且易于外界訪問。
2.iOS單例模式應(yīng)用場景
單例模式泛應(yīng)用于某些需要全局共享的資源中搔谴,比如管理類魁袜,引擎類,也可以通過單例來實現(xiàn)傳值敦第。UIApplication峰弹、NSUserDefaults等都是iOS中的系統(tǒng)單例;
? 單例模式優(yōu)缺點(不僅限于iOS開發(fā))
使用簡單芜果、延時求值鞠呈、易于跨模塊
3.內(nèi)存占用與運行時間
? 對比使用單例模式和非單例模式的例子,在內(nèi)存占用與運行時間存在以下差距:
(1) 單例模式:單例模式每次獲取實例時都會先進行判斷右钾,看該實例是否存在——如果存在蚁吝,則返回;否則霹粥,則創(chuàng)建實例灭将。因此,會浪費一些判斷的時間后控。但是庙曙,如果一直沒有人使用這個實例的話,那么就不會創(chuàng)建實例浩淘,節(jié)約了內(nèi)存空間捌朴。
(2) 非單例模式:當(dāng)類加載的時候就會創(chuàng)建類的實例,不管你是否使用它张抄。然后當(dāng)每次調(diào)用的時候就不需要判斷該實例是否存在了砂蔽,節(jié)省了運行的時間。但是如果該實例沒有使用的話署惯,就浪費了內(nèi)存左驾。
4.線程的安全性
(1) 從線程的安全性上來講,不加同步的單例模式是不安全的。比如诡右,有兩個線程安岂,一個是線程A,另外一個是線程B帆吻,如果它們同時調(diào)用某一個方法域那,那就可能會導(dǎo)致并發(fā)問題。在這種情況下猜煮,會創(chuàng)建出兩個實例來次员,也就是單例的控制在并發(fā)情況下失效了。
(2) 非單例模式是線程安全的王带,因為程序保證只加載一次淑蔚,在加載的時候不會發(fā)生并發(fā)情況。
(3) 單例模式如果要實現(xiàn)線程安全辫秧,只需要加上synchronized即可束倍。但是這樣一來,就會減低整個程序的訪問速度盟戏,而且每次都要判斷绪妹,比較麻煩。
(4) 雙重檢查加鎖:為了解決(3)的繁瑣問題柿究,可以使用“雙重檢查加鎖”的方式來實現(xiàn)邮旷,這樣,就可以既實現(xiàn)線程安全蝇摸,又能使得程序性能不受太大的影響婶肩。
單例模式會阻止其它對象實例化其自己的對象的副本,從而確保所有對象都訪問唯一實例貌夕。
因為單例模式的類控制了實例化的過程律歼,所以類可以更加靈活修改實例化過程。
?注意:我們在使用單例類之前啡专,一定要考慮好單例類是否適合和類以后的擴展性险毁,避免盲目濫用單例