初步多线程(GCD)_1
1. 常用方法:
(1)block定义: --block语法
a) 声明:
文章图片
b) 定义:
文章图片
c) 调用:
文章图片
(2) GCD (系统方法相关)
a) 基础:
i.后台执行
文章图片
ii.主线程执行
文章图片
iii.一次性执行 --- dispatch_once_t必须是全局或static变量
文章图片
iv.延迟2秒执行
dispatch_after是延迟提交,不是延迟运行,所以想用dispatch_after精确控制运行状态的朋友可要注意了~
文章图片
b) 自定义queue: --- 创建串/并行队列 --- 注意第二个参数
文章图片
c) dispatch_group --- 使用dispatch_group_async函数将多个任务关联到一个dispatch Group和相应的queue中,group会并发地同时执行这些任务。(会阻塞线程)
i. 自己创建队列:
文章图片
dispatch_group_notify函数用来指定一个额外的block,该block将在group中所有任务完成后执行。
ii. 无法直接使用队列变量 --- 使用AFNetworking添加异步任务
文章图片
使用dispatch_group_enter,dispatch_group_leave就可以方便的将一系列网络请求“打包”起来~
d) dispatch_suspend && dispatch_resume --- 提供了 “挂起、恢复” 队列的功能。
dispatch_suspend !=立即停止队列的运行,不能保证可以立即停止队列上正在运行的block。
文章图片
e) dispatch_apply --- 在一个队列(串行或并行)上“运行”多次block
文章图片
dispatch_apply确实会“等待”其所有的循环运行完毕才往下执行,会将主线程阻塞。
GCD 通过用dispatch barriers创建一个读者写者锁提供了一个优雅的解决方案。
f) dispatch_barrier_async && dispatch_barrier_sync
向某个队列插入一个block,当目前正在执行的block运行完成后,阻塞这个block后面添加的block,只运行这个block直到完成,然后再继续后续的任务。
文章图片
dispatchbarrier(a)sync只在自己创建的并发队列上有效,在全局(Global)并发队列、串行队列上,效果跟dispatch_(a)sync效果一样。
h) dispatch_set_context与dispatch_set_finalizer_f的配合使用 --- 为队列添加上下文数据。
因为GCD是C语言接口形式,所以要用malloc/new/OC对象(__bridge关键字)创建。
同时,要用free/delete/CFRelease释放内存。
文章图片
2. 引文:
(1)Grand Central Dispatch 基础教程:Part 1 --- 连续&并发,同步&异步,并发&并行,队列等基础知识,特别适合入门和对知识体系的梳理。
(2)iOS开发进阶/唐巧 --- GCD的便利性 和 GCD方法的简单使用。
(3)多线程编程 - GCD --- 细节介绍的很到位,实例也很贴切。
(4)GCD使用经验与技巧浅谈 --- GCD使用中的注意事项 和 一些 “坑”。
==================================================
GCD 扫盲篇
【初步多线程(GCD)_1】Parse源码浅析系列(一)---Parse的底层多线程处理思路:GCD高级用法
推荐阅读
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 爱就是希望你好好活着
- 昨夜小楼听风
- 知识
- 死结。
- 我从来不做坏事
- 烦恼和幸福
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- Linux下面如何查看tomcat已经使用多少线程
- 说得清,说不清