美文网首页
为什么使用dispatch_once_t简单理解

为什么使用dispatch_once_t简单理解

作者: 宇轩Simid | 来源:发表于2019-08-28 15:25 被阅读0次

通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。
在iOS中单例模式实现方式是在类中编写名为sharedInstance的方法,该方法只会返回全类共用的单例实例,而不会在每次调用时都创建新的实例。

使用同步块实现:

  • (id)sharedInstance {
    static ClassName *sharedInstance = nil;
    @synchronized (self) {
    if (!sharedInstance) {
    sharedInstance = [[self alloc]init];
    }
    }
    return sharedInstance;
    }
    需要考虑加速问题。

而GCD引入了一个新特征,更为方便:

  • (instancetype)sharedInstance {
    static ClassName *sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    sharedInstance = [[self alloc]init];
    });
    return sharedInstance;
    }

此函数接收类型为dispatch_once_t的特殊参数,还有一个块参数。对于onceToken标记,该函数保证相关的块必定会执行,且执行一次。此操作完全是线程安全的!

使用dispatch_once可以简化代码且保证线程安全,开发者无需担心加锁或同步。所有问题都在GCD底层处理。此外,dispatch_once更高效。它没有使用重量级的同步机制。使用同步机制,每次运行代码都需要获取锁。dispatch_once采用“原子访问”来查询标记,判断代码是否执行过。

相关文章

  • 为什么使用dispatch_once_t简单理解

    通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。在iOS中单例模式实现方式...

  • GCD源码解析

    GCD源码解析 dispatch_once_t typedef long dispatch_once_t 。可知...

  • Eventbus3代码分析(三):注解简单使用

    注解简单使用 这里目的是为了理解, 和简单的使用这块理解了,后面都是差不多的 简单理解和使用 自己每次在onCre...

  • 为什么使用微服务(简单理解)

    说微服务之前,先说下单体应用,将所有的功能都由一个应用实现,基本上没有外部依赖,这种就是单体应用,这种应用的开发和...

  • iOS 线程相关面试题

    问题:项目中用到的多线程技术 使用dispatch_once_t创建单例使用dispatch_after延迟做事情...

  • 什么时候会用到Redux?

    1.为什么使用Redux? 2. Redux工作原理 3.什么时候使用Redux 使用场景: 4.简单理解redu...

  • 简单理解Mobx(二):使用方法

    上一节我们已经了解了为什么要使用Mobx,简单理解Mobx(一):使用目的 这节我们来看看如何引入并使用Mobx ...

  • 代码只执行一次

    static dispatch_once_t disOnce;

  • 简单理解使用git

    git是一个版本管理方式,本地库和远程库是一样的,但是远程库可以一直存在(除非新的版本管理方式出现),远程库一般是...

  • Kotlin - inline 简单理解

    本文分2部分1,inline 简单分析2,inline 使用场景 一、inline 简单理解 个人理解:使用 ...

网友评论

      本文标题:为什么使用dispatch_once_t简单理解

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