如果你要使用多线程,在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.例子
介绍比较常用的异步并发执行事例:
图1效果:(时间是同步执行的,线程number不一样,说明开启了三条不同的线程同时执行)
图22.例子
GCD异步串行执行
先创建一个串行的队列,不像并发队列可以直接拿来用。
dispatch_queue_t queue = dispatch_queue_create("", NULL);
第一个参数是一个字符串,C语言的字符串不要用@哟。
第二个传NULL。
我的代码:
图3运行效果:(number 一样:说明串行;时间一样:并发执行)
图4哦,最后说一句,GCD根本不用管线程的生命周期,好方便。
网友评论