GCD

线程

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值