延迟执行
//第一个参数:dispatch_time_t when 时间//第二个参数:dispatch_queue_t queue 队列//第三个参数:dispatch_block_t block 执行的block//这段代码的含义为:让主队列延迟两秒打印LitterLdispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ NSLog(@"LitterL");});
一次性执行
//第一个参数:dispatch_once_t *predicate 记录代码是否被执行过 默认为0 但执行一次后就是-1了 所以就看到智能执行一次的这个效果//第二个参数:dispatch_block_t block 执行的block_dispatch_once(dispatch_once_t *predicate, dispatch_block_t block){ if (DISPATCH_EXPECT(*predicate, ~0l) != ~0l) { dispatch_once(predicate, block); }}//-------------------实例--------------------- -(void)once { //整个程序运行过程中只会执行一次 //onceToken用来记录该部分的代码是否被执行过 static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ NSLog(@"LitterL"); }); }
栅栏函数(控制任务的执行顺序)
//栅栏函数//第一个参数 dispatch_queue_t 队列//第二个参数 dispatch_block_t 执行的block//作用:在我们需要控制任务的顺序的时候可以使用栅栏函数,进行控制dispatch_async(dispatch_queue_t queue, dispatch_block_t block);//-------------------------实例---------------------------//// 不管怎么输出,我的1-X、2-X都是在上面,而不是随意乱输出//-(void)barrier{ //1.获得队列 dispatch_queue_t queue = dispatch_queue_create("download", DISPATCH_QUEUE_CONCURRENT); //2.异步函数 dispatch_async(queue, ^{ for (NSInteger i =0; i<10; i++) { NSLog(@"1-%zd--%@",i,[NSThread currentThread]); } }); dispatch_async(queue, ^{ for (NSInteger i =0; i<10; i++) { NSLog(@"2-%zd--%@",i,[NSThread currentThread]); } }); //栅栏函数:控制并发队列中任务的执行顺序 dispatch_barrier_async(queue, ^{ NSLog(@"+++++++++++++++++++++++++++"); }); dispatch_async(queue, ^{ for (NSInteger i =0; i<10; i++) { NSLog(@"3-%zd--%@",i,[NSThread currentThread]); } }); dispatch_async(queue, ^{ for (NSInteger i =0; i<10; i++) { NSLog(@"4-%zd--%@",i,[NSThread currentThread]); } });}
快速迭代
-(void)test{ //1.获得并发队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //2.快速迭代 /* 第一个参数:要迭代的次数 第二个参数:队列,并发队列 第三个参数:block 封装任务 */ dispatch_apply(10, queue, ^(size_t index) { NSLog(@"%zd----%@",index,[NSThread currentThread]); });}
队列组
-(void)group{ //0.创建队列组 dispatch_group_t group = dispatch_group_create(); //1.创建队列 dispatch_queue_t queue = dispatch_get_global_queue(0, 0); //2.异步函数 /* 1)封装任务 2)把任务添加到队列中 3)监听任务的执行情况,group */ dispatch_group_async(group, queue, ^{ NSLog(@"download1---%@",[NSThread currentThread]); }); dispatch_group_async(group, queue, ^{ NSLog(@"download2---%@",[NSThread currentThread]); }); dispatch_group_async(group, queue, ^{ NSLog(@"download3---%@",[NSThread currentThread]); }); //3.当队列组中所有的任务都执行完毕之后会通知group执行dispatch_group_notify方法 dispatch_group_notify(group, queue, ^{ NSLog(@"队列组中所有的任务都执行完毕了"); });}
结束
本章到此结束 欢迎各位码友随意转载并指正