GCD

作者: 弹一首键盘协奏曲 | 来源:发表于2016-06-29 21:55 被阅读215次

          在iOS所有实现多线程的方案中,GCD应该是最有魅力的,因为GCD本身是苹果公司为多核的并行运算提出的解决方案。GCD在工作时会自动利用更多的处理器核心,以充分利用更强大的机器。GCD是Grand Central Dispatch的简称,它是基于C语言的。如果使用GCD,完全由系统管理线程,我们不需要编写线程代码。只需定义想要执行的任务,然后添加到适当的调度队列(dispatch queue)。GCD会负责创建线程和调度你的任务,系统直接提供线程管理

        使用GCD的时候有以下几个步骤:

        一、创建任务:确定要执行什么操作

        二、创建队列:将任务添加到队列中  GCD会将队列里的任务取出,放到对应的线程中去执行

        三、选择任务的执行函数:

    1.同步的方式执行函数

    dispatch_sync(dispatch_queue_t queue, ^(void)block);

    参数1:queue是对应的队列

    参数2:block是对应的执行任务

    2.异步的方式执行函数

    dispatch_async(dispatch_queue_t queue, ^(void)block);

    参数1:队列

    参数2:对应的任务

    队列有下面四种

    *需要注意的是:主队列中严禁提交同步任务  会导致线程卡死  导致界面假死

    主队列   不允许在主线程中提交同步任务,否则会死循环   刷新UI的操作放到主队列中执行

    dispatch_queue_t mainQueue = dispatch_get_main_queue();

    同步状态:会卡死

    异步状态:不会开线程(会在线程闲下来的时候执行提交的任务)

    //全局并发队列

    dispatch_queue_t globalQueue

    =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

    同步�状态:不会开线程,顺序执行

    异步状态:会开线程,并且乱序执行

    //自定义串行

    dispatch_queue_t serialQueue=dispatch_queue_create("abc", NULL);

    同步状态:不开线程,并且顺序执行

    异步状态:开一条线程,顺序执行

    //自定义的并行队列

    dispatch_queue_t ConcurrentQueue=dispatch_queue_create("abc", DISPATCH_QUEUE_CONCURRENT);

    同步状态:不开线程,顺序执行

    异步状态:开线程,乱序执行(会开多条线程)

    如下方法   来做示例

    -(void)threadCommunication{

    //创建主队列

    dispatch_queue_t  mainQueue = dispatch_get_main_queue();

    //创建全局并发队列

    dispatch_queue_t  globalQueue

    =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    //开启异步任务

    dispatch_async(globalQueue, ^{

    NSURL *url = [NSURL URLWithString:@"http://v1.qzone.cc/pic/201408/29/17/03/540041ff31605450.jpeg%21600x600.jpg"];

    NSData *data= [NSData dataWithContentsOfURL:url];

    NSLog(@"全局并发队列=%@",[NSThread currentThread]);

            //开启第二个异步任务

             dispatch_async(mainQueue, ^{

              //这里刷UI《有好东西哦。你懂的》

              self.MyImageView.image=[UIImage imageWithData:data];

              NSLog(@"主队列=%@",[NSThread currentThread]);

                });

         });

    }

    相关文章

      网友评论

          本文标题:GCD

          本文链接:https://www.haomeiwen.com/subject/tpyxjttx.html