博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程篇-GCD-常用方法的使用
阅读量:4966 次
发布时间:2019-06-12

本文共 3013 字,大约阅读时间需要 10 分钟。

延迟执行

//第一个参数: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]);    });}

731729-20160114224352350-571839308.png

队列组

-(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(@"队列组中所有的任务都执行完毕了");    });}

731729-20160114224436350-180822166.png

结束

本章到此结束            欢迎各位码友随意转载并指正

转载于:https://www.cnblogs.com/ljy-666/p/5125826.html

你可能感兴趣的文章
2018 Multi-University Training Contest 10 - Count
查看>>
HDU6203 ping ping ping
查看>>
《人人都是产品经理》书籍目录
查看>>
如何在git bash中运行mysql
查看>>
OO第三阶段总结
查看>>
构建之法阅读笔记02
查看>>
DataTable和 DataRow的 区别与联系
查看>>
检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败
查看>>
mysql数据库中数据类型
查看>>
Fireworks基本使用
查看>>
两台电脑间的消息传输
查看>>
Linux 标准 I/O 库
查看>>
.net Tuple特性
查看>>
Java基础常见英语词汇
查看>>
iOS并发编程笔记【转】
查看>>
08号团队-团队任务5:项目总结会
查看>>
SQL2005 删除空白行null
查看>>
mysql备份与恢复
查看>>
混沌分形之迭代函数系统(IFS)
查看>>
边框圆角Css
查看>>