您的位置:首页 > 移动开发 > IOS开发

iOS开发中的gcd多线程tips

2015-07-14 15:40 435 查看
本篇文章会持续更新:


我们经常用到的:

dispatch_async(dispatch_get_global_queue(0, 0), ^{
// 处理耗时操作的代码块

//通知主线程刷新
dispatch_async(dispatch_get_main_queue(), ^{
//回调或者说是通知主线程刷新
});

});


其中main_queue是系统默认的串行队列,global_queue是系统默认的并行队列。


什么是串行队列(Serial)?


创建任意个数的串行队列,每个队列依次执行添加的任务,一个队列同一时刻只能执行一个任务(串行),但是各个队列之间不影响,可以并发执行。每个队列中的任务运行在一个由各自串行队列维护的独立线程上,一个队列中只有一个线程。


什么是并行队列(Concurrent)?


并行队列是不允许自己创建的,系统中存在三个不同优先级的并行队列。并行队列依旧按照任务添加的顺序启动任务,但是,后一个任务无须等待前一个任务执行完毕,而是启动第一个任务后,立即启动下一个任务。至于同一时刻允许同时运行多少个任务有系统决定。任务各自运行在并行队列为他们提供的独立线程上,并行队列中同时运行多少个任务,就必须维护多少个线程。

gcd中还有一个概念叫做主调度队列


主调度队列(main dispatch queue)

主调度队列中的任务运行在应用程序主线程上,所以,如果你要修改应用程序的界面,他是唯一的选择。

如下:
dispatch_async(dispatch_get_main_queue(), ^{

//跟新界面的操作

});



只执行一次:

static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// 这里写的代码只会被执行一次
});


如果你收集有实用的关于gcd的用法,欢迎分享给我,直接在文章下面评论即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: