兩種單例的實現方式

在IOS中單例設計模式有很廣泛的用途,它保證一個類只有一個實例,并提供一個訪問它的全局訪問點,一個app只有一個實列,也就是說他一直存在,除非你手動置空,在內存里面也只會用到一個地址.

蘋果官方提供了很多單列對象供用戶使用,例如:

UIApplication類提供了 +sharedApplication 方法創建和獲取UIApplication單例.

NSBundle類提供了 +mainBundle 方法獲取NSBundle單例.

NSFileManager類提供了 +defaultManager 方法創建和獲得NSFileManager單例(使用代理時需要調用 -init 實例化方法來實例化一個新的對象).

NSUserDefaults類提供了 +defaultUserDefaults 方法去創建和獲取NSUserDefaults單例.

NSNotificationCenter類提供了 +defaultCenter 方法創建和獲取NSNotificationCenter單例.

我所知道的單例有兩種實現方式,根據線程安全的實現來區分的話,一種是使用@synchronized,另一種是使用GCD的dispatch_once函數。

synchronized線程鎖的方式

```

+ (instancetype)sharedPersonSync{

staticidinstance;

@synchronized(self) {

if (instance ==nil) {

instance = [[selfalloc] init];}

}

returninstance;

}

```

GCD方式

```

+ (instancetype)sharedPerson {

static dispatch_once_tonceToken;

dispatch_once(&onceToken, ^{

instance = [[self alloc] init];

});

returninstance;

}

```

Warning:單例雖然可以達到共享傳值的目的,但非必要的情況下最好不要使用單例的方式實例化對象.

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

推薦閱讀更多精彩內容

  • 在IOS中單例設計模式有很廣泛的用途,它保證一個類只有一個實例,并提供一個訪問它的全局訪問點,一個app只有一個實...
    Chivalrous閱讀 178評論 0 0
  • 線程間的通信 從子線程回到主線程 延時執行 iOS常見的延時執行有兩種方式p 調用NSObject的方法 p 使用...
    一抹月光3053閱讀 770評論 1 12
  • 單例模式 什么是單例模式? 單例模式想一個大獨裁者,他規定在他的國度里面,所有數據的訪問和請求都得經過他,甚至你要...
    GitHubPorter閱讀 1,182評論 0 4
  • 單例一般作為:工具類 單例命名:一般情況下如果一個類是單例,那么就要提供一個類方法用于快速創建單例對象,而且這個類...
    茉上心弦閱讀 1,792評論 0 15
  • 在開發中經常會用到單例設計模式,目的就是為了在程序的整個生命周期內,只會創建一個類的實例對象,而且只要程序不被殺死...
    不要重名就好閱讀 556評論 0 0