利用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

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

相关文章
相关标签/搜索