/*
第一個(gè)參數(shù):DISPATCH_TIME_NOW 從現(xiàn)在開始計(jì)算時(shí)間
第二個(gè)參數(shù):延遲的時(shí)間 2.0 * GCD時(shí)間單位:納秒
第三個(gè)參數(shù):隊(duì)列
*/
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
});
//不能使用到懶加載
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
});
//柵欄函數(shù)不能使用全局并發(fā)隊(duì)列
dispatch_barrier_async(dispatch_queue_create("download", DISPATCH_QUEUE_PRIORITY_DEFAULT), ^{
});
/*
第一個(gè)參數(shù):遍歷的次數(shù)
第二個(gè)參數(shù):隊(duì)列(并發(fā)隊(duì)列)
第三個(gè)參數(shù):索引
*/
dispatch_apply(10, dispatch_get_global_queue(0, 0), ^(size_t index) {
});
//1.創(chuàng)建隊(duì)列
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
//2.創(chuàng)建隊(duì)列組
dispatch_group_t group = dispatch_group_create();
//3.異步函數(shù)
dispatch_group_async(group, queue, ^{
});
dispatch_group_async(group, queue, ^{
});
//攔截通知,當(dāng)隊(duì)列組中所有的任務(wù)都執(zhí)行完畢的時(shí)候會(huì)進(jìn)入到下面的方法
//本身是異步的
dispatch_group_notify(group, queue, ^{
});
//等待,死等.直到隊(duì)列組中所有的任務(wù)都執(zhí)行完畢之后才能執(zhí)行
//本身是阻塞的
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
//1.創(chuàng)建GCD中的定時(shí)器
/*
第一個(gè)參數(shù):DISPATCH_SOURCE_TYPE_TIMER 表示是定時(shí)器
第二個(gè)參數(shù):描述信息,線程ID
第三個(gè)參數(shù):更詳細(xì)的描述信息
第四個(gè)參數(shù):隊(duì)列,決定GCD定時(shí)器中的任務(wù)在哪個(gè)線程中執(zhí)行
*/
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(0, 0));
//2.設(shè)置定時(shí)器(起始時(shí)間|間隔時(shí)間|精準(zhǔn)度)
/*
第一個(gè)參數(shù):定時(shí)器對(duì)象
第二個(gè)參數(shù):起始時(shí)間
第三個(gè)參數(shù):間隔時(shí)間
第四個(gè)參數(shù):精準(zhǔn)度 絕對(duì)精準(zhǔn)0
*/
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 2.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
//3.設(shè)置定時(shí)器執(zhí)行的任務(wù)
dispatch_source_set_event_handler(timer, ^{
});
//4.啟動(dòng)任務(wù)
dispatch_resume(timer);