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
有些时候你但愿有这种行为,但若是正在想要的是仅一个实例被实例化就须要注意这点引用