码迷,mamicode.com
首页 > 其他好文 > 详细

中级篇第四期:初识GCD

时间:2015-04-06 18:55:10      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:ios


谈到GCD,相信小伙伴们一点都不陌生,没错,我们在项目开发过程中最常用的线程处理就是它咯,相信好多小伙伴们对其的运用以及炉火纯青了哦,下面小弟呢,就再次简单介绍一下它的各个常用的方法吧


并发队列在后台开启线程执行


 
 __block NSInteger num = 0;
 dispatch_async(dispatch_get_global_queue(0, 0), ^{
     num++;
     NSLog(@"async1 = %ld", num);
 });
 NSLog(@"global = %ld", num);


主队列在主线程执行


 
 dispatch_async(dispatch_get_main_queue(), ^{
        num++;
        NSLog(@"async2 = %ld", num);
    });
 NSLog(@"main = %ld", num);


你会发现,最后执行的是主队列中的任务,而后台队列与其他两个log先后顺序不一定哦,所以我们把UI上的更新都放到主队列上哦,这样肯定是数据都接收到了以后才会改变UI的哦


一次性执行,只会执行一次,一般我们把它用在单例的创建里面哦


 
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        NSLog(@"2");
    });

延迟执行,一般我们都会放在主队列中去延迟执行哦,如果用并发队列的话,会开启一个新的子线程哦,但是注意把握时机哦


    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSLog(@"3");
    });


创建队列组来管理队列,当我们执行notify的时候就是队列的任务汇总,也就是组内所有线程执行结束以后才执行这里的汇总任务哦


    dispatch_group_t group = dispatch_group_create();
    dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
        NSLog(@"3++");
    });
    dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
        NSLog(@"3+");
    });
    dispatch_group_notify(group, dispatch_get_global_queue(0, 0), ^{
        NSLog(@"3++++++1");
    });


好吧,以上就是我们在项目中最常用的GCD技术相关的方法哦,其实它是很简单,但是已经封装好的,我想它的底层应该是有类似于NSOperation的东西的哦,所以如果你想做一些取消线程等复杂的方法呢,我建议还是用NSOperation来做,毕竟它也算是底层类了哦


大部分线程操作呢,基本都是来解决部分耗时方法的哦,有时间的话,我再调研一下它的高级应用。




有任何相关问题请小伙伴们来技术交流群里提出并做相关分享哦,婉华在这里感谢那些在群里面懂得交流、分享的小伙伴们,因为有你们,我很开心,我愿与你们共进步





本文出自 “东软iOS校友群的技术博客” 博客,请务必保留此出处http://neusoftios.blog.51cto.com/9977509/1629249

中级篇第四期:初识GCD

标签:ios

原文地址:http://neusoftios.blog.51cto.com/9977509/1629249

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!