博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS oc 线程 进程,同步异步,并发串行,来捋捋
阅读量:7210 次
发布时间:2019-06-29

本文共 1351 字,大约阅读时间需要 4 分钟。

hot3.png

 

(一)大概念

gcd:使用起来就俩概念

  1.任务(你想做的事)

  2.队列(存放任务)

gcd可以根据你的需要,将你的任务进行排序,来确定什么时候执行。

(二)小概念(同步异步,并发串行都是啥)

同步:在当前线程中执行

异步:在另一条线程中执行

 

并发:多个任务并发执行

串行:一个任务执行完毕,再执行下个任务

 

(三)上代码

1.任务执行方式

(1)用同步的方式执行任务(在当前线程执行当前任务)

dispatch_sync(dispatch_queue_t  _Nonnull queue, ^(void)block)   //1.队列名称   2.要执行的block(在里面写你要执行的任务)

(2)用异步的方式执行任务(开辟新线程执行当前任务)

dispatch_async(dispatch_queue_t  _Nonnull queue, ^(void)block)//1.队列名称   2.要执行的block(在里面写你要执行的任务)

 

2.队列的类型

(1)并发队列

  GCD默认已经提供了全局的并发队列,供整个应用使用,不需要手动创建

  使用dispatch_get_global_queue函数获得全局的并发队列 

dispatch_queue_t dispatch_get_global_queue(dispatch_queue_priority_t priority,unsigned long flags); // 此参数暂时无用,用0即可

          第一个参数是优先级 ,第二个参数是以后用的,用0就行了

说明:全局并发队列的优先级

#define DISPATCH_QUEUE_PRIORITY_HIGH 2 // 高

#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0 // 默认(中)

#define DISPATCH_QUEUE_PRIORITY_LOW (-2) // 低

#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN // 后台

(2)串行队列

 1.使用dispatch_queue_create函数创建串行队列

    dispatch_queue_t  dispatch_queue_create(const char *label,  dispatch_queue_attr_t attr); // 队列名称, 队列属性,一般用NULL即可

示例:

dispatch_queue_t queue = dispatch_queue_create("wendingding", NULL); // 创建dispatch_release(queue); // 非ARC需要释放手动创建的队列

2. 使用主队列

  主队列是GCD自带的一种特殊的串行队列,放在主队列中的任务,都会放到主线程中执行

  使用dispatch_get_main_queue()获得主队列

    我觉得这张图总结的挺好的,只有在使用并发队列并且异步执行任务的情况下,所创建的任务才会并发执行

代码我也不写了,比较懒,有啥不懂的 直接问

转载于:https://my.oschina.net/u/2964974/blog/842057

你可能感兴趣的文章
Ubuntu下安装、卸载notepad++
查看>>
Windows Azure上的Odoo(OpenERP)-1.创建Ubuntu虚拟机,安装PostgreSQL 数据库
查看>>
C# 网卡IP(网上资料整理)
查看>>
html网站网址一键打包成App平台-开心App平台
查看>>
使用react的一点提醒17/10/26
查看>>
Java 内部类的阐述
查看>>
redis-大key寻找
查看>>
EF 数据查询(更改默认排序)
查看>>
求连续子数组的最大和
查看>>
SpringMVC最简单配置应用
查看>>
jQuery与Zepto的异同
查看>>
jsp注册页面的省份联动(网上copy别人的,然后自己弄了一下才知道怎么用)
查看>>
CRC检错技术原理
查看>>
读取Ini文件字段
查看>>
asp获取来源Url
查看>>
第一次实验
查看>>
Redis基础操作
查看>>
clob大数据转换为多行数据
查看>>
bootstrap的流式布局
查看>>
如何通过线程池异步调用
查看>>