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