#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
(void)viewDidLoad {
[super viewDidLoad];//全局队列
dispatch_queue_t q = dispatch_get_global_queue(0, 0);//并发队列
dispatch_queue_t q1 = dispatch_queue_create(“denglu”, DISPATCH_QUEUE_CONCURRENT);//全局队列异步执行
dispatch_async(q, ^{});
//并发队列异步执行
dispatch_async(q1, ^{});
//全局队列同步执行
dispatch_sync(q1, ^{});
//并发队列同步执行
dispatch_sync(q1, ^{});
/*
延迟执行
1.time
2。在那个线程执行
3.回调
*/
dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1*NSEC_PER_SEC));dispatch_after(time, dispatch_get_main_queue(), ^{
});
/*
- 只执行一次 应用场景 单利设计
- 如果有多线程访问也能保证线程安全 能过保证线程安全
GCD执行比互斥锁执行效率高
*/
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{NSLog(@”只执行一次”);
});
/*
- 调度组
*/
//队列
dispatch_queue_t qq = dispatch_get_global_queue(0, 0);//调度组
dispatch_group_t g = dispatch_group_create();//添加任务,让队列调度,任务执行情况,最后通知群组
dispatch_group_async(g, qq, ^{NSLog(@"调度组");
});
//所有任务执行完毕之后的通知 回到主线程
dispatch_group_notify(g, dispatch_get_main_queue(), ^{NSLog(@"调度组结束");
});
//1.主队列 获取
dispatch_queue_t mq = dispatch_get_main_queue();//2.异步任务 主队列
dispatch_async(mq, ^{});
//同步任务 主队列 死循环
//同步任务死锁: 当前是在主线程,让主队列执行同步任务 会死锁
dispatch_sync(mq, ^{});
}
@end