單例模式解析

在軟件工程中,單例是一種用于實現單例的數學概念, 既將類的實例化僅限制成一個對象的一種設計模式.或者我們可以簡單地將它理解為一個類,只能實例化一個對象的類.在我們IOS工程中,UiApplication 中至少有一個單例模式的存在;

比如: [UIApplication sharedApplication] 這樣就可以在工程里調這個單例;

單例模式的作用 :可以保證在程序運行過程,一個類只有一個實例,而且該實例易于供外界訪問,從而方便地控制了實例個數,并節約系統資源。

單例模式的使用場合:在整個應用程序中,共享一份資源(這份資源只需要創建初始化1次),應該讓這個類創建出來的對象永遠只有一個。

對于目前單例模式的最佳方式,就是GCD出來以后我們所引用的dispatch_once函數創建的單例;

dispatch_once函數,接收一個dispatch_once用于檢查該對象是否已經被調用,它還接收一個希望在應用的生命周期中只能被調用一次的代碼塊,這就是單例的實例化要的;

dispatch_once函數還有一個好處,就是線程安全問題,使用dispatch_once函數,這就意味著你不用再去給單例加@synchronized,也稱給單例加鎖;關于線程安全為題,個人理解:給單例對象之所以要加鎖,是應為系統對于單例對象的內存申請是在堆區,而不是棧區,而我們在調用的時候一般是在棧區去執行它,也就是說每一個線程都可以調用它,而我們知道堆區的內存是有共享性的,為了保證單例對象的唯一性,避免不會在同一時間被調用,我們給他采用的加鎖;

代碼演示:

.h中

#import@interface Model : NSObject

//單例

+ (instancetype)sharedHandel;

#import "Model.h"

@implementation Model

.m中方法的實現

+ (instancetype)sharedHandel

{

static Model *model = nil;

static dispatch_once_t OnceToken;

dispatch_once(&OnceToken, ^{

model = [[Model alloc] init];

});

return model;

}

@end

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 單例模式(SingletonPattern)一般被認為是最簡單、最易理解的設計模式,也因為它的簡潔易懂,是項目中最...
    成熱了閱讀 4,292評論 4 34
  • 單例模式是一種最常見的設計模式。使用場景:確保某個類有且只有一個對象的場景。實現單例模式的幾個關鍵點:1、構造函數...
    讀書的小二郎閱讀 355評論 0 1
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,210評論 30 471
  • 單例模式 什么是單例模式? 單例模式想一個大獨裁者,他規定在他的國度里面,所有數據的訪問和請求都得經過他,甚至你要...
    GitHubPorter閱讀 1,182評論 0 4
  • 一、框架視圖 二、關鍵代碼 PageNotFound AccelormeterControl Btn1_Click...
    TonyWan_AR閱讀 1,131評論 0 7