中级篇第四期:初识GCD

谈到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来做,毕竟它也算是底层类了哦

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

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

时间: 2024-08-08 05:37:07

中级篇第四期:初识GCD的相关文章

中级篇第五期:初识UIScrollView

UIScrollView是我们在iOS开发中最常用的UI控件之一,包括它的子类tableView也是非常常用呢,那么本期小弟就来介绍一下UIScrollView的基础知识咯 在我们工作当中呢,有很多功能都是基于ScrollView的基础上的,所以我们要先了解系统的ScrollView到底能做哪些事情呢 首先初始化一个ScrollView       UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(

中级篇第六期:若隐若现的NavigationBar

我们就要如下图的效果哦,就是让NavigationBar随着滑动而出现与隐藏,就是那种若隐若现的感觉,感觉棒棒哒,哈哈 废话不多说咯,上代码咯 首先呢,我们要创建TableView还要给它指定一个HeaderView,然后再开始我们接下来的事情       UIView *backGroundView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(tableView.frame), 80)];     backGr

初级篇第四期:纯代码来写UI控件

学习建议:自己动手,丰衣足食 学习周期:1周 学习目的:熟练使用Obejct-C中最常用的简单UI控件 学习答疑:欢迎来技术群里提问并做分享 学习工具:Xcode开发环境 学习内容:我们会在下面告诉大家手动创建常见的UI控件 经过前几期的学习,相信小伙伴们应该对UI控件有所熟悉了哦,没错,那我们接下来就用纯代码来写一些常用的UI控件好了 首先,任何一个UI控件都是有它固定的属性的,第一就是frame,一定要记住,没有frame就没有它的存在,所以一个UI控件的灵魂就在于它的frame,因为它是显

Kotlin——从无到有系列之中级篇(四):面向对象的特征与类(class)继承详解

如果您对Kotlin很有兴趣,或者很想学好这门语言,可以关注我的掘金,或者进入我的QQ群大家一起学习.进步. 欢迎各位大佬进群共同研究.探索 QQ群号:497071402 进入正题 在前面的章节中,详细的详解了类的使用,但是由于篇幅的限制,关于类的很多特性都没有讲解到.今天在这篇文章中,详细的讲解Kotlin中类的特性.如果您对Kotlin中的类还没有一个整体的了解的话,请参见我上一篇文章Kotlin--类(class)详解 众所周知,Kotlin是一门面向对象的开发语言.那么他也有面向对象语言

swift篇第四期:闭包、UI基础、Protocol

首先来讲下闭包吧,其实闭包跟之前C中的block回调函数类似,但这里只研究了基础的使用,我在下面的两个VC中利用闭包做了通讯传值,也算是比较常用的方法吧,回头有时间我再研究下在项目中的其它应用   let sayHello = {     println("nihao") } sayHello() //定义一个闭包函数,与常规方法不同的是后面有个关键字in哦 let add = { (a: Int, b: Int) -> Int in     return a + b } //调

中级篇第七期:ScrollView常用练习

那么小弟这次的练习就是在ScrllView里面放入两个TableView,然后通过ScrollView的滑动实现两个TableView的互转,接下来再增加两个Button,来实现选中与非选中,然后关联按钮与ScrollView的滑动,并且同时关联滑动后按钮改变状态的一个简单例子 这种小Demo在实际开发中会经常遇到,所以,小伙伴们可以根据这个继续做开发调研,继续增加新的功能,毕竟每个产品中的功能都不相同,需要我们自己去拓展 废话不多说,直接上代码 首先创建一个ScrollView,并设置它的常用

中级篇第十期:UIImage的处理

在我们开发过程中,经常会遇到对UIImage的处理,那么在这里简单介绍几种常用的吧,我一般把它们统一写在UIImage的Category中 首先是对图片的压缩处理   - (UIImage *)scaledImageWithSize:(CGSize)size {     UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);     [self drawInRect:CGRectMake(0, 0, size.width, size.heig

经验篇第四期:群里的那点事儿(四)

问题1:关于图片清晰度分辨率问题 问题2:关于控件居中的属性 问题3:UIDatePicker的那点事 问题4:关于判断语句的顺序问题 问题5:判断登录缓存问题 问题6:关于属性的setter方法问题 问题7:关于iOS8 SDK中UIScrollView的那点事 欢迎小伙伴们补充问题哦,也希望大家经常到群里来做沟通交流哦,让我们共同进步,未来我们那最初的梦想

随心篇第四期:有小伙伴建议我转到Html5

Html5,做前端的小伙伴们应该都知道,其实它就是JS+CSS+Html5的布局,应该是这样理解吧,话说,这些东西我都不懂,但还有一点,有人说Html5可以取代Object-C在iOS开发的地位以及Java在Android的地位,所以他们告诉我:趁还没有工作时间过长,赶紧转语言来学Html5吧 首先我要感谢那些邀请我转语言到Html5的小伙伴们,谢谢你们觉得我还是有潜力转语言的哦,其实我也做过很多相关的调查,我知道FaceBook之前就有做过Html5来取替iOS与Android平台的客户端,但