GCD

来源:互联网 发布:version mac 破解版 编辑:程序博客网 时间:2024/05/16 08:58

线程

GCD:
用同步的方式执行任务dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);
用异步的方式执行任务dispatch_async(dispatch_queue_t queue, dispatch_block_t block);

queue:队列
block:任务

使用dispatch_queue_create函数创建串行队列
dispatch_queue_t queue = dispatch_queue_create(“wendingding”, NULL); // 创建队列
dispatch_release(queue); // 非ARC需要释放手动创建的队列

使用主队列(跟主线程相关联的队列)
dispatch_queue_t queue = dispatch_get_main_queue();

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

获取一个全局的默认优先级的并发队列。
GCD默认已经提供了全局的并发队列,供整个应用使用,不需要手动创建
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 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 // 后台

例子
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//2.添加任务到队列中,就可以执行任务
//异步函数:具备开启新线程的能力
dispatch_async(queue, ^{
NSLog(@”下载图片1—-%@”,[NSThread currentThread]);
});

使用dispatch_suspend(queue)可以暂停队列中任务的执行,使用dispatch_result(queue)可以继续执行被暂停的队列

GCD单次执行
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{

})
GCD延迟执行
// when 时间 从现在开始经过多少纳秒
dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC));

void (^task)() = ^ {
// 延迟操作执行的代码
NSLog(@”%@”, [NSThread currentThread]);
};
// 经过多少纳秒,由主队列调度任务异步执行
dispatch_after(when, dispatch_get_main_queue(), task);
// 先执行就是异步,后执行就是同步
NSLog(@”come here”);

0 0
原创粉丝点击