OC——52个有效方法:45.使用 dispatch_once 创建单例模式

代码示例

+ (instancetype)sharedGuide {
    static LPGuide *instance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[LPGuide alloc]init];
    });
    return instance;
}

使用dispatch_once可以简化代码并且彻底保证线程安全。无需担心加锁或同步,所有问题
GCD底层处理,变量定义在 static 作用域中,保证编译器执行方法都会复用这个变量,而不会重新创建。
此外,dispatch_once更高效,没有使用重量级的同步机制,采用“原子访问”来查询标记,判断代码原来是否执行过。重量级的同步机制:每次运行代码都获取锁。

总结:
1.使用 GCD 提供的dispatch_once编写一次性代码。
2.标记声明在staticglobal作用域中,只需执行一次的块传给dispatch_once函数,传进去的标记也是相同的。

适用于所有情况的单例
适用于 ARC 单例模式通用宏

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容