iOS-GCD多线程的基本使用

如果你要使用多线程,在iOS中,使用GCD这种方式简直就是烂大街了。

所以必须学习,不然 你怎么看得懂别人的代码惹。

以下只是告诉你怎么使用GCD开启多线程,想要理论的请百度GCD(哇,好多)

GCD中有2个用来执行任务的函数(!=。=C语言的知识惹)

dispatch_sync : 同步执行,不开新线程

dispatch_async : 异步执行,开启新线程

同时还要理解另外两个概念:串行和并发队列(执行任务的方式)

并发:多个任务可以同时执行

串行:一个任务执行完在执行下一个任务(注:不要以为任务一个一个执行就在主线程,就不可以异步,错误!它也可以异步执行串行)

看异步的方法:

dispatch_async(dispatch_queue_t queue, ^(void)block)

dispatch_queue_t 就是队列,选择并发或串行。

同时下载图片啊数据啊,一般都用并发队列

那问题来了,挖掘机到底....额...错了错了...是怎么代码写并发队列?

GCD默认提供使用全局队列,只要我们拿来使用就行了,下面就是拿全局队列:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

然后我们就可以使用queue了。

1.例子

介绍比较常用的异步并发执行事例:

iOS-GCD多线程的基本使用_第1张图片
图1

效果:(时间是同步执行的,线程number不一样,说明开启了三条不同的线程同时执行)

图2

2.例子

GCD异步串行执行

先创建一个串行的队列,不像并发队列可以直接拿来用。

dispatch_queue_t queue = dispatch_queue_create("", NULL);

第一个参数是一个字符串,C语言的字符串不要用@哟。

第二个传NULL。

我的代码:

iOS-GCD多线程的基本使用_第2张图片
图3

运行效果:(number 一样:说明串行;时间一样:并发执行)

图4

哦,最后说一句,GCD根本不用管线程的生命周期,好方便。

你可能感兴趣的:(iOS-GCD多线程的基本使用)