美文网首页
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