队列分为串行队列,并发队列,全局队列和主队列;
串行队列:一次只能安排一个任务。
dispatch_queue_t q = dispatch_queue_create("itcast",DISPATCH_QUEUE_SERIA);
DISPATCH_QUEUE_SERIAL==NULL;
并发队列:一次可安排多个任务。
dispatch_queue_t q = dispatch_queue_create("itcast", DISPATCH_QUEUE_CONCURRENT);
全局队列:系统为了方便程序员开发使用,提供的一个队列,本质上就是并发队列;
dispatch_queue_t q = dispatch_get_global_queue(0, 0);
使用以下代码创建全局队列,就可以实现 iOS 7 & iOS 8的适配!
dispatch_get_global_queue(0, 0);
主队列:专门用在主线程上调度任务的队列。
主线程上调度的任务,都必须在主线程上执行。
dispatch_queue_t q = dispatch_get_main_queue();
在GCD中是将”任务“添加到“队列”中,并指定任务的“执行方法”。
任务:用block封装的一个代码块。
任务:
同步任务: 这句代码没有执行完毕,就不能执行下一段代码。不需要开启线程
异步任务: 这句代码没有执行完毕,可以执行下一局代码,异步往往是开线程的代名词
小结:
1、开不开线程取决于执行任务的函数---同步任务不开线程,异步任务开启线程。
2、开多少个线程取决于队列(并发队列可已开启多条线程,串行队列只开启一条线程)前提是异步任务。
同步任务:不能开线程,一不小心还会死锁!有什么用处?
作用:可以在并发队列中,挡住后续的任务,必须等待某一个任务完成,这种任务之间的关系-"依赖"
如果在 MRC 开发,针对自行创建的队列,需要release
dispatch_release(q);