iOS單例模式(二)

單例是一種類,該類只能在第一次用的時(shí)候?qū)嵗粋€(gè)對象,后期直接調(diào)用此對象(有點(diǎn)共享的意思)虾标。

在Foundation框架中比如NSFileManger和NSNotificationCenter,分別通過它們的類方法defaultManager和defaultCenter獲取叮阅。盡管不是嚴(yán)格意義的單例,這些類方法返回一個(gè)可以在應(yīng)用的所有代碼中訪問到的類的共享實(shí)例泣特。使用Objective-C實(shí)現(xiàn)單例模式的最佳方式向來有很多爭論浩姥,開發(fā)者似乎每幾年就會改變他們的想法。他們也引入了一個(gè)很適合用于實(shí)現(xiàn)單例模式的函數(shù)状您。

該函數(shù)就是dispatch_once:

void dispatch_once( dispatch_once_t *predicate, dispatch_block_t block);

該函數(shù)接收一個(gè)dispatch_once用于檢查該代碼塊是否已經(jīng)被調(diào)度的謂詞(是一個(gè)長整型勒叠,實(shí)際上作為BOOL使用)。它還接收一個(gè)希望在應(yīng)用的生命周期內(nèi)僅被調(diào)度一次的代碼塊膏孟,對于本例就用于shared實(shí)例的實(shí)例化眯分。

dispatch_once不僅意味著代碼僅會被運(yùn)行一次,而且還是線程安全的柒桑,這就意味著你不需要使用諸如@synchronized之類的來防止使用多個(gè)線程或者隊(duì)列時(shí)不同步的問題颗搂。

如果被多個(gè)線程調(diào)用,該函數(shù)會同步等等直至代碼塊完成幕垦。

實(shí)際要如何使用這些呢?

好吧丢氢,假設(shè)有一個(gè)AccountManager類,你想在整個(gè)應(yīng)用中訪問該類的共享實(shí)例先改。你可以按如下代碼簡單實(shí)現(xiàn)一個(gè)類方法:

+ (AccountManager *)sharedManager {

static AccountManager *sharedAccountManagerInstance = nil;

static dispatch_once_t predicate;

dispatch_once(&predicate, ^{

sharedAccountManagerInstance = [[self alloc] init];

});

return sharedAccountManagerInstance;

}

這就意味著你任何時(shí)候訪問共享實(shí)例疚察,需要做的僅是:

AccountManager *accountManager = [AccountManager sharedManager];

就這些,你現(xiàn)在在應(yīng)用中就有一個(gè)共享的實(shí)例仇奶,該實(shí)例只會被創(chuàng)建一次貌嫡。

該方法有很多優(yōu)勢:

1 線程安全

2 很好滿足靜態(tài)分析器要求

3 和自動引用計(jì)數(shù)(ARC)兼容

4 僅需要少量代碼

該方法的劣勢就是它仍然運(yùn)行創(chuàng)建一個(gè)非共享的實(shí)例:

AccountManager *accountManager = [[AccountManager alloc] init];

有些時(shí)候你希望有這種行為,但如果正在想要的是僅一個(gè)實(shí)例被實(shí)例化就需要注意這點(diǎn)该溯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末岛抄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子狈茉,更是在濱河造成了極大的恐慌夫椭,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氯庆,死亡現(xiàn)場離奇詭異蹭秋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)堤撵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門仁讨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人实昨,你說我怎么就攤上這事洞豁。” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵丈挟,是天一觀的道長刁卜。 經(jīng)常有香客問我,道長礁哄,這世上最難降的妖魔是什么长酗? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮桐绒,結(jié)果婚禮上夺脾,老公的妹妹穿的比我還像新娘。我一直安慰自己茉继,他們只是感情好咧叭,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著烁竭,像睡著了一般菲茬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上派撕,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天婉弹,我揣著相機(jī)與錄音,去河邊找鬼终吼。 笑死镀赌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的际跪。 我是一名探鬼主播商佛,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼姆打!你這毒婦竟也來了良姆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤幔戏,失蹤者是張志新(化名)和其女友劉穎玛追,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體评抚,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡豹缀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了慨代。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡啸如,死狀恐怖侍匙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤想暗,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布妇汗,位于F島的核電站,受9級特大地震影響说莫,放射性物質(zhì)發(fā)生泄漏杨箭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一储狭、第九天 我趴在偏房一處隱蔽的房頂上張望互婿。 院中可真熱鬧,春花似錦辽狈、人聲如沸慈参。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驮配。三九已至,卻和暖如春着茸,著一層夾襖步出監(jiān)牢的瞬間壮锻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工涮阔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留猜绣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓澎语,卻偏偏與公主長得像途事,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子擅羞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1尸变、OC中創(chuàng)建線程的方法是什么?如果指定在主線程中執(zhí)行代碼减俏?如何延時(shí)執(zhí)行代碼召烂。【難度系數(shù)★★】 1)創(chuàng)建線程的方法...
    木旁_G閱讀 1,940評論 2 16
  • 一娃承、單例是什么奏夫?(apl??ke??(?)n 申請) 在 Foundation 和 Application Kit...
    藍(lán)白自由閱讀 6,048評論 6 22
  • 單例模式(SingletonPattern)一般被認(rèn)為是最簡單、最易理解的設(shè)計(jì)模式历筝,也因?yàn)樗暮啙嵰锥镏纾琼?xiàng)目中最...
    成熱了閱讀 4,226評論 4 34
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,125評論 29 470
  • 圖書館自習(xí)室座位有限,晚到的人很難找到空位梳猪。孫呈往往是最早到的人之一麻削,他愛坐在靠窗的從前往后數(shù)第六張桌子,習(xí)慣性地...
    豐城劍回閱讀 555評論 17 18