利用GCD的dispatch_once建立單例

1 + (id)sharedWhatever
2 {
3     static dispatch_once_t pred;
4     static Whatever *whatever = nil;
5     dispatch_once(&pred, ^{
6         whatever = [[self alloc] init];
7     });
8     return whatever;
9 }

該方法有不少優點:安全

    1.線程安全spa

    2.很好知足靜態分析器要求線程

    3.和自動引用計數(ARC)兼容code

    4.僅須要少許代碼blog

該方法的劣勢就是它仍然運行建立一個非共享的實例:it

whatever = [[Whatever alloc] init];class

有些時候你但願有這種行爲,但若是正在想要的是僅一個實例被實例化就須要注意這點引用

相關文章
相關標籤/搜索