單例模式解析

在軟件工程中,單例是一種用于實(shí)現(xiàn)單例的數(shù)學(xué)概念, 既將類的實(shí)例化僅限制成一個(gè)對(duì)象的一種設(shè)計(jì)模式.或者我們可以簡(jiǎn)單地將它理解為一個(gè)類,只能實(shí)例化一個(gè)對(duì)象的類.在我們IOS工程中,UiApplication 中至少有一個(gè)單例模式的存在;

比如: [UIApplication sharedApplication] 這樣就可以在工程里調(diào)這個(gè)單例;

單例模式的作用 :可以保證在程序運(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次),應(yīng)該讓這個(gè)類創(chuàng)建出來(lái)的對(duì)象永遠(yuǎn)只有一個(gè)。

對(duì)于目前單例模式的最佳方式,就是GCD出來(lái)以后我們所引用的dispatch_once函數(shù)創(chuàng)建的單例;

dispatch_once函數(shù),接收一個(gè)dispatch_once用于檢查該對(duì)象是否已經(jīng)被調(diào)用,它還接收一個(gè)希望在應(yīng)用的生命周期中只能被調(diào)用一次的代碼塊,這就是單例的實(shí)例化要的;

dispatch_once函數(shù)還有一個(gè)好處,就是線程安全問(wèn)題,使用dispatch_once函數(shù),這就意味著你不用再去給單例加@synchronized,也稱給單例加鎖;關(guān)于線程安全為題,個(gè)人理解:給單例對(duì)象之所以要加鎖,是應(yīng)為系統(tǒng)對(duì)于單例對(duì)象的內(nèi)存申請(qǐng)是在堆區(qū),而不是棧區(qū),而我們?cè)谡{(diào)用的時(shí)候一般是在棧區(qū)去執(zhí)行它,也就是說(shuō)每一個(gè)線程都可以調(diào)用它,而我們知道堆區(qū)的內(nèi)存是有共享性的,為了保證單例對(duì)象的唯一性,避免不會(huì)在同一時(shí)間被調(diào)用,我們給他采用的加鎖;

代碼演示:

.h中

#import@interface Model : NSObject

//單例

+ (instancetype)sharedHandel;

#import "Model.h"

@implementation Model

.m中方法的實(shí)現(xiàn)

+ (instancetype)sharedHandel

{

static Model *model = nil;

static dispatch_once_t OnceToken;

dispatch_once(&OnceToken, ^{

model = [[Model alloc] init];

});

return model;

}

@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容