标签: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
标签:ios
原文地址:http://neusoftios.blog.51cto.com/9977509/1629249