美文网首页
OC——52个有效方法:45.使用 dispatch_once

OC——52个有效方法:45.使用 dispatch_once

作者: 梦蕊dream | 来源:发表于2018-04-23 14:14 被阅读19次

代码示例

+ (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 单例模式通用宏

相关文章

网友评论

      本文标题:OC——52个有效方法:45.使用 dispatch_once

      本文链接:https://www.haomeiwen.com/subject/kvxllftx.html