dispatch_async 与 dispatch_sync

2023-11-01

从字面意思上看,sync 同步,async 异步。

  • 并行队列 + 异步 = 异步
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    });
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    });
  • 并行队列 + 同步 = 同步
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        
    });
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    });

顺序执行

  • 串行队列 + 同步
dispatch_sync(dispatch_get_main_queue(), ^{

});

主线程是一个同步队列,里面加一个同步任务,线程锁死。老一些的iOS版本直接会闪退,新一些的版本block中的代码块将不会被执行,但未闪退。总之这样做是有问题的。需要判断处理:

if ([[NSThread currentThread] isMainThread])
{
    // ...
}
else {
    dispatch_async(dispatch_get_main_queue(), ^{
        // ...
    });
}

为了线程安全,做这样处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dispatch_async 与 dispatch_sync 的相关文章

  • GCD->OC

    VHAsyncRun h VHAsyncRun h VHUpload Created by vhall on 2019 11 7 Copyright 2019 vhall All rights reserved typedef void V
  • Java高级编程——多线程(JDK5新增创建线程方式Callable,线程池)

    创建线程的第三 四种方式 一 实现Callable接口 1 1与Runnable相比 1 2实现步骤 创建Callable接口实现类 重写call方法 新建实现类对象 将实现类对象作为参数传递待FutureTask的构造器中 创建Futur
  • 【QT】Qt多线程中的信号与槽

    QT Qt多线程中的信号与槽 1 Qt对象的依附性和事务循环 QThread继承自QObject 自然拥有发射信号 定义槽函数的能力 QThread默认声明了以下几个关键信号 信号只能声明不能定义 1 线程开始运行时发射的信号 void s
  • dispatch_async 与 dispatch_sync

    从字面意思上看 sync 同步 async 异步 并行队列 异步 异步 dispatch async dispatch get global queue DISPATCH QUEUE PRIORITY DEFAULT 0 dispatch
  • Springboot 多线程实现事务控制

    业务背景 工作中有很多 在一个service实现层 有可能调用其他的service 或者说是使用异步线程 这样就不容易控制当前操作成功和失败 不多说 上代码 获取数据库事务控制器 Component public class Transac
  • Java多线程 - 线程通信(线程协作)

    生产者消费者模式 举个例子 我作为消费者去肯德基买鸡块吃 正常情况下 如果还有鸡块的话就直接卖给我了 如果没有的话 前台就会通知后面的大厨进行制作 那么大厨就相当于是生产者 大厨做好之后会给到前台 然后前台通知我 消费者 来取餐 在线程中
  • Java多线程 - 线程状态

    线程状态 五个状态 新生 就绪 运行 死亡 阻塞 停止线程 不推荐使用JDK提供的stop destroy 方法 已弃用 推荐线程自己停止 建议用一个标志位进行终止变量 到flag false 则终止线程运行 public class St
  • 在 swift 中按串行顺序同步多个 Web 服务调用

    我点击 Web 服务 URL 10 次并得到响应 我在用Alamofire and SwiftyJSON 这是我的控制器代码 class ViewController UIViewController let dispatchGroup D
  • 长周期区块应用

    我的应用程序中有以下循环 var maxIterations Int 0 func calculatePoint cn Complex gt Int let threshold Double 2 var z Complex init re
  • React + Redux - 在哑组件中调度一个动作?

    我开始学习 Redux 整个想法看起来很简洁 但是在将我的 React 应用程序从 正常 重建为 redux way 后 这个问题出现了 我有一个基于异步调用的 JSON 构建的 if 项目列表 然后该列表中的每个项目都会在单击时发送异步调
  • 将参数传递给dispatch_async

    我是 Swift 新手 正在研究dispatch async 函数的工作原理 API 文档显示dispatch async 有两个参数 不过 我可以传递一个参数 这没关系 dispatch async dispatch get main q
  • NSTimer 不会失效

    我在使计时器失效时遇到问题 property nonatomic strong NSTimer timer 在成功的块内 我在主线程上分配和设置计时器 dispatch async dispatch get main queue self
  • Swift 中 void 函数中的dispatch_async 和意外的非void 返回值

    我的里面有一个函数appDelegate返回用户的当前位置 现在我想在其他地方异步调用它 我这样做了 func handleLocation gt CLLocation let priority DISPATCH QUEUE PRIORIT
  • 我们可以从后台线程更新 UI 吗?

    你好 iOS 专家 只是为了澄清我的概念 我对主线程的 UI 更新有点困惑 Apple 的要求是所有 UI 相关的事情都应该在主线程中进行 因此要测试 Case1 我将任务异步分派到全局分派并发队列 经过一些处理后 我直接从并发队列 后台线
  • ios 10+、Swift 3+ - 无法从 Singleton 实例中消除 UIAlertController

    我创建了一个覆盖层 以便在对服务器运行异步数据抓取时运行 以便用户在数据抓取完成之前不会继续按 UI 中的按钮 我已将该函数放入全局单例类中 并在传递布尔值时调用它来表示是否要显示或隐藏 我可以让它显示 但我无法让它隐藏 这是代码 clas
  • AlamoFire(异步)调用中 UIProgressView 进度更新非常慢

    在 AlamoFire 获取请求中 我正在尝试更新我的进度条 就像这样 alamofireManager request GET urlPath parameters params responseJSON request response
  • 是否dispatch_async(dispatch_get_main_queue(), ^{...});等到完成?

    我的应用程序中有一个场景 我想在一个方法中执行一些耗时的任务 其中包括一些数据处理和 UI 更新 我的方法看起来像这样 void doCalculationsAndUpdateUIs DATA PROCESSING 1 UI UPDATE
  • 使用dispatch_async在Swift中并发分析数组

    我正在尝试使用 GCD 的后台线程同时分析照片 这是我写的代码 dispatch async dispatch get global queue Int QOS CLASS UTILITY value 0 for var i 0 i lt
  • Swift 3 异步调度警告

    我有这个代码 DispatchQueue global priority DispatchQueue GlobalQueuePriority default async let url URL string itemImageURL let
  • dispatch_async UIWebView 加载请求

    我正在加载我的应用程序中的 JavaScript 该脚本将尝试找到解决方案 这可能需要一些时间 我不想等待该解决方案超过 5 秒 在这种情况下 我只想停止请求并向用户显示一条消息 我一直在尝试使用 NSTimers 和dispatch as

随机推荐

  • 两个有序序列的中位数(详解)

    1 实践题目 7 3 两个有序序列的中位数 2 问题描述 在一行中输出两个输入序列的并集序列的中位数 时间复杂度不能大于O logn 3 算法描述 不能粘贴程序 因为时间复杂度不能大于logn 所以把原序列排好序再来找中位数是不可能的了 快
  • float,double 的范围和有效数字怎么算出来的?

    首先说一下 范围是3 4E 38 3 4E 38 可提供7位有效数字 上述这两个量都是近似值 各个编译器不太一样的 下面我就将标准值是怎么定义的 和你说一下 这个比较复杂 建议你找一下IEEE754标准看一下 这个简单说一下吧 在IEEE7
  • 『坚如磐石的 PieCloudDB』:透明加密模块的设计与实现

    导读 2 月 17 日 由中国开源软件推进联盟 PostgreSQL 分会 中科院软件所 CSDN 联合举办的 中国 PostgreSQL 数据库生态大会 盛大召开 拓数派 OpenPie 作为冉冉升起的新一代云原生分布式数据库厂商 受邀参
  • 【C++】IO流

    文章目录 1 C语言的输入与输出 2 流是什么 3 C IO流 3 1 C 标准IO流 3 2 C 文件IO流 3 2 1 二进制读写 3 2 2 文本读写 4 stringstream 字符串流 的简单介绍 5 总结 1 C语言的输入与输
  • SQLite下载、安装与连接

    1 下载SQLite SQLite官网 https www sqlite org download html 根据自己电脑操作系统配置 选择32位或64位下载 一般情况下是64位 总共两个压缩包 或者直接去 https download c
  • 如何打造优秀Web3产品

    近日 我们采访了Mysten Labs的联合创始人兼首席执行官Evan Cheng 探讨了Web3技术对消费者的价值 Web3行业应该如何更好地自我诠释 以及它对产品开发的影响 您曾谈到Web3作为一种所有权实验 这种新技术可能会改变消费者
  • Oracle中的数据导出(4)

    目录 法一 使用SQL plus命令脚本 法二 使用PLSQL Developer工具 前几篇文章描述了如何将Oracle中的数据导出到库外 但是导出的数据结果都是文本文档 这样页面查看不和谐 编辑又略显麻烦 因此这篇文章将描述如何将Ora
  • 116_QT_RCC: Error in ‘file.qrc‘: Cannot find file

    有中文路径或者名字 导致找不到文件 全部改成英文就OK了
  • 数据耦合与控制耦合

    数据耦合 其中一个模块的输出作为另一个模块的输入 那么就存在数据耦合 如 Module A中 int FunA return 1 Module B中 int b FunA 上面两个modules就存在数据耦合 控制耦合 其中一个模块可以控制
  • C语言中对用户输入的数据使用冒泡排序法后输出

    代码 include stdio h include windows h int main 先定义一个数组a 变量i j和临时变量temp 用来存放临时数据 int a 5 i j temp printf Input Five Number
  • 点云双边滤波算法(附 matlab 代码)

    一 原理概述 在二维图像领域中 双边滤波算法是通过考虑中心像素点到邻域像素点的距离 一边 以及像素亮度差值所确定的权重 另一边 来修正当前采样中心点的位置 从而达到平滑滤波效果 同时也会有选择性的剔除部分与当前采样点 差异 太大的相邻采样点
  • ABA问题的解决

    什么是ABA问题 ABA问题是发生在CAS过程当中的下面以一个例子来表示 假如有两个线程A B 两个线程都从主内存中获取了某个对象的值为value1 当进行CAS的时候A首先把value1更换成了value2 因为线程B可能没有CPU资源调
  • PYGAME关于矩形自动移动问题(碰到边界反弹)

    import pygame sys from settings1 import plant game ai setting plant game class moving def init self ai setting screen se
  • mysql学习笔记二(函数)

    函数 一 字符串函数 二 数值函数 三 日期函数 四 流程函数 一 字符串函数 select 函数 参数 注意 substring str start len 函数起始索引为1 二 数值函数 例 select ceil 1 1 gt 2 s
  • 超算云(GPU服务器)环境配置

    最近在用并行超算云GPU服务器 中国国家网格12区 搭建毕设的环境 这里记录一下 首先 超算云服务器的登录可以采用网页版 也可以采用客户端 超算云地址 https cloud paratera com 需要注意的是 并行超算云只提供wind
  • [FPGA IP系列] BRAM IP参数配置与使用示例

    FPGA开发中使用频率非常高的两个IP就是FIFO和BRAM 上一篇文章中已经详细介绍了Vivado FIFO IP 今天我们来聊一聊BRAM IP 本文将详细介绍Vivado中BRAM IP的配置方式和使用技巧 一 BRAM IP核的配置
  • 人工智能革命:从AGI到ASI的道路

    在某种程度上 我们将获得具有人类一般智能的AGI计算机后 只是一群人和计算机平等地生活在一起 哦 实际上并不会 问题是 AGI具有与人类相同的智能和计算能力水平 但仍然具有优于人类的优势 如 硬件 速度 大脑的神经元最大频率大约为200赫兹
  • 数据分析--Python将dataframe格式数据存入clickhouse

    Python将dataframe格式数据存入clickhouse 基于Python实现大批量dataframe格式数据存入clickhouse中 python 一切 基于Python实现大批量dataframe格式数据存入clickhous
  • 信用卡风控——梯度提升树方法Python实现

    本文是一个用户按时还款的预测模型 利用台湾地区一些信用卡客户的信用额度 教育程度 婚姻状况 过去的还款状态 账单等信息对客户进行评分 采用GBDT 梯度提升树 模型对数据进行分类 预测其是否会产生逾期偿还 数据来源于kaggle的一个比赛
  • dispatch_async 与 dispatch_sync

    从字面意思上看 sync 同步 async 异步 并行队列 异步 异步 dispatch async dispatch get global queue DISPATCH QUEUE PRIORITY DEFAULT 0 dispatch