首页 > 代码库 > 利用GCD的dispatch_once创建单例

利用GCD的dispatch_once创建单例

1 + (id)sharedWhatever2 {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.线程安全

    2.很好满足静态分析器要求

    3.和自动引用计数(ARC)兼容

    4.仅需要少量代码

该方法的劣势就是它仍然运行创建一个非共享的实例:

whatever = [[Whatever alloc] init];

有些时候你希望有这种行为,但如果正在想要的是仅一个实例被实例化就需要注意这点

利用GCD的dispatch_once创建单例