美文网首页
dispatch_once的实现原理

dispatch_once的实现原理

作者: MiniCoder | 来源:发表于2020-03-18 20:09 被阅读0次
+ (instancetype)sharedInstance
{
    /*定义相应类实例的静态变量;
    意义:函数内定义静态变量,无论该函数被调用多少次,
         在内存中只初始化一次,并且能保存最后一次赋的值
    */
    static ClassName *instance = nil;
    /*定义一个dispatch_once_t(其实也就是整型)静态变量,
    意义:作为标识下面dispatch_once的block是否已执行过。
         static修饰会默认将其初始化为0,当值为0时才会执行block。
         当block执行完成,底层会将onceToken设置为1,这也就是为什
         么要传onceToken的地址(static修饰的变量可以通过地址修改
         onceToken的值),同时底层会加锁来保证这个方法是线程安全的
    */
    static dispatch_once_t onceToken;
    /*只要当onceToken == 0时才会执行block,否则直接返回静态变量instance*/
    dispatch_once(&onceToken, ^{
        instance = [[ClassName alloc] init];
        //...
    });
    return instance;
}

相关文章

网友评论

      本文标题:dispatch_once的实现原理

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