iOS GCD的使用

GCD  Grand Central Dispatch 纯C语言编写

1. GCD是苹果公司为多核的并行运算提出的解决方案

  GCD会自动利用更多的CPU内核(比如双核、四核)

  GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)

  程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码

  进程:也就是一个正在运行的应用程序。

  线程:进程中的某一条完整的执行路径。一个进程可以有多个线程,至少有一个线程,即主线程。在iOS开发中,所有涉及UI界面的,必须在主线程中更新。

2.   GCD的工作原理:让程序平行排队,根据可用的处理资源,安排他们在任何可用的处理器上执行任务

3.   串行队列,并行队列,同步任务,异步任务。 异步任务会开辟线程:异步任务在串行队列只开启一个子线程,异步任务在并行队列开启多个子线程。

 //GCD 并行队列,异步任务:开启多个线程,同时执行。
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(queue, ^{
        for (int i =0; i<1000; i++) {
            NSLog(@"AAAAA %d",i);
        }
    });

    dispatch_async(queue, ^{
        for (int i =0; i<1000; i++) {
            NSLog(@"BBBBB %d",i);
        }
    });

    dispatch_async(queue, ^{
        for (int i =0; i<1000; i++) {
            NSLog(@"CCCCC %d",i);
        }
    });

    //串行队列,同步任务 :不开启线程,按顺序执行
    dispatch_queue_t Cqueue = dispatch_queue_create("queueName", NULL);
    dispatch_sync(Cqueue, ^{
        for (int i =0; i<1000; i++) {
            NSLog(@"DDDDD %d",i);
        }
    });

    dispatch_sync(Cqueue, ^{
        for (int i =0; i<1000; i++) {
            NSLog(@"EEEEE %d",i);
        }
    });

    dispatch_sync(Cqueue, ^{
        for (int i =0; i<1000; i++) {
            NSLog(@"FFFFF %d",i);
        }
    });

4.我们平时使用多线程,会经常碰到一种需求:子线程任务处理完成之后,需要主线程更新UI。我们如何才能知道子线程的任务都完成了。

当我们使用串行队列时,只需将最后的回调主线程任务添加在所有任务的最后,顺序执行,便可回调。 但是当我们使用并行队列时候,就无法知道什么时候完成所有的子线程任务,

这时候,就得用到dispatch_group了。代码如下:

 //我们同时执行几个异步任务,他们执行完了,我们有时候还得知道一下,,怎么办呢,这时候,就得用到dispatch_group了,如下编代码这样弄,到最后执行 dispatch_group_notify ,便可
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_group_t group = dispatch_group_create();
    dispatch_group_async(group, queue, ^{
        NSLog(@"开始执行1");
    });

    dispatch_group_async(group, queue, ^{
        NSLog(@"开始执行2");
    });

    dispatch_group_async(group, queue, ^{
        NSLog(@"开始执行3");
    });

    dispatch_group_notify(group, queue, ^{
        NSLog(@"全部执行完成,必须在主线程更新UI!!!");
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"主线程更新UI完成。");
        });
    });

*以上如有不对的地方,欢迎各位指正,同时也欢迎大家交流。

时间: 2024-10-13 22:21:47

iOS GCD的使用的相关文章

iOS GCD中级篇 - dispatch_group的理解及使用

前文我们讲了GCD基础篇,以及同步.异步,并发.并行几个概率的理解. 参考链接: iOS GCD基础篇 - 同步.异步,并发.并行的理解 现在讲一下dispatch_group的概念以及几种场景下的使用 1.关于dispatch_group 把一组任务提交到队列中,这些队列可以不相关,然后监听这组任务完成的事件. 最常见的几个方法: 1.dispatch_group_create创建一个调度任务组 2.dispatch_group_async 把一个任务异步提交到任务组里 3.dispatch_

IOS GCD

UIButton * btn = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; [btn setTitle:@"default"forState:UIControlStateNormal]; btn.backgroundColor = [UIColorblackColor]; [self.view addSubview:btn]; //情况一 dispatch_async(dispatch_get_glo

iOS GCD的常见API使用指南

iOS GCD使用指南 Grand Central Dispatch(GCD)是异步执行任务的技术之一.一般将应用程序中记述的线程管理用的代码在系统级中实现.开发者只需要定义想执行的任务并追加到适当的Dispatch Queue中,GCD就能生成必要的线程并计划执行任务.由于线程管理是作为系统的一部分来实现的,因此可统一管理,也可执行任务,这样就比以前的线程更有效率. Dispatch Queue Dispatch Queue是用来执行任务的队列,是GCD中最基本的元素之一. Dispatch

iOS GCD学习

GCD概念:Grand Central Dispatch 1.queue 队列 dispatch queue 分发队列 2.task  任务 3.thread 线程 task 是一个一个单独的任务(方法,函数,block) queue里存放的是一个或者多个task thread 为了保证task能顺利执行,queue会开辟适当的thread,在开辟的thread里面执行task queue分两种: 1.serialqueue(串行队列) 特点:任务先进先出.排在前面任务先执行,执行之后后面的任务

iOS GCD 详解

一.介绍 1.什么是GCD?Grand Central Dispatch,是苹果公司开发的一套多核编程的底层API.GCD首次发布在Mac OS X 10.6,iOS4及以上也可用.GCD存在于libdispatch.dylib这个库中,iOS程序默认动态加载这个库,无需手动引入.2.GCD工作原理让程序平行排队的特定任务,根据可用的处理资源,安排他们在任何可用的处理器核心上执行任务.一个任务可以是一个Function或是一个block.GCD的底层依然是用线程实现,不过这样可以让程序员不用关注

iOS GCD使用指南

Grand Central Dispatch(GCD)是异步运行任务的技术之中的一个. 一般将应用程序中记述的线程管理用的代码在系统级中实现.开发人员仅仅须要定义想运行的任务并追加到适当的Dispatch Queue中,GCD就能生成必要的线程并计划运行任务.因为线程管理是作为系统的一部分来实现的,因此可统一管理.也可运行任务,这样就比曾经的线程更有效率. Dispatch Queue Dispatch Queue是用来运行任务的队列,是GCD中最主要的元素之中的一个. Dispatch Que

iOS GCD 编程小结

一.简单介绍 1.GCD简介? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 3.提示 (1)GCD存在于libdispatch.dylib这个库中,这个调度库包含了GCD的所有的东西

iOS GCD NSOperation NSThread等多线程各种举例详解(拷贝)

2年多的iOS之路匆匆而过,期间也拜读来不少大神的博客,近来突然为自己一直做伸手党感到羞耻,是时候回馈社会.回想当年自己还是小白的时候,照着一些iOS多线程教程学,也只是照抄,只知其然.不知其所以然.现写一篇详细教程奉献给广大读者.废话就不多说了,直接上干货.如下图列举了很多多线程的知识点,每个知识点都写有对应的详细例子,并对运行结果进行分析,绝对拿实践结果来说话.如果各位道友发现错误之处还请指正.附上demo下载地址 iOS中几种多线程的比较 GCD:是苹果为多核的并行运算提出的解决方案,所以

ios gcd加载图片

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSString *urlString = @"http://img0.pconline.com.cn/pconline/1111/28/2601303_p2.jpg"; NSURL *url = [NSURL URLWithString:urlString]; NSData *sData = [NSData dataWith