兩種單例的實現(xiàn)方式

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

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

UIApplication類提供了 +sharedApplication 方法創(chuàng)建和獲取UIApplication單例.

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

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

NSUserDefaults類提供了 +defaultUserDefaults 方法去創(chuàng)建和獲取NSUserDefaults單例.

NSNotificationCenter類提供了 +defaultCenter 方法創(chuàng)建和獲取NSNotificationCenter單例.

我所知道的單例有兩種實現(xiàn)方式,根據(jù)線程安全的實現(xiàn)來區(qū)分的話,一種是使用@synchronized,另一種是使用GCD的dispatch_once函數(shù)。

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:單例雖然可以達(dá)到共享傳值的目的,但非必要的情況下最好不要使用單例的方式實例化對象.

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

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

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

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