GCD dispatch async / dispatch sync 介绍 。

 一 . 什么是 GCD 

GCD (Grand Central Dispatch) :是一套底层的 API , 它主要是将允许程序将任务切分成多个单一的任务 ,然后提交至队列来进行并发或窜行的执行方法 。GCD 与block 是在IOS 4.0 引用的,不支持 4.0 以下的系统 。


二 . dispatch async 与 dispatch  sync 方法的介绍 

dispatch async 异步执行方法 ,不会等待block块中的方法 执行完成才继续向下执行 ;

dispatch sync 同步执行方法 ,会等待block 中的方法执行完成后,才继续向下执行 ;

-----------------------------------async-------------------------------------

NSLog(@"dispatch_async 1");

    

    dispatch_async(dispatch_get_main_queue(), ^{

        

       NSLog(@"dispatch_async 2");

        

        [NSThreadsleepForTimeInterval:3];

        

        NSLog(@"dispatch_async 3");

        

    });

    NSLog(@"dispatch_async 4");


2015-07-15 21:34:22.829 GrandCentralDispatch__GCD[667:18394] dispatch_async 1

2015-07-15 21:34:22.829 GrandCentralDispatch__GCD[667:18394] dispatch_async 4

2015-07-15 21:34:22.849 GrandCentralDispatch__GCD[667:18394] dispatch_async 2

2015-07-15 21:34:25.851 GrandCentralDispatch__GCD[667:18394] dispatch_async 3

----------------------------------------------------------------------------


三.  GCD队列 

GCD 有三种队列 ; 主队列/全局队列/自创建队列


主队列:与主线程功能相同 ,程序启动时自定生成 ,无法创建 ;

调用方法 dispatch_get_main_queue ;


dispatch_queue_t  main_:queue   =  dispatch_get_main_queue ( ) ;    // main_queue为创建的队列;

全局队列 : 全局队列为并发队列,由整个进程共享,进程中存在三个队列,分别为高  /中 / 默认 /三个优先级队列 , 可以通过 dispatch_get_global_queue 的函数 传入优先级来访问队列 ;

dispatch_queue_t queue1 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

 dispatch_queue_t queue2 =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0);

 dispatch_queue_t queue3 =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW,0);



// 可以在所有方法执行完成之后在执行主线方法 

dispatch_queue_t queue1 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT0)

dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group, queue1, ^{

        

        [NSThread sleepForTimeInterval:5];

        NSLog(@"第一阶段执行完毕");

    });

    

    dispatch_group_async(group, queue1, ^{

        [NSThread sleepForTimeInterval:10];

        NSLog(@"第二阶段执行完毕");

    });

    

    dispatch_group_async(group, queue1, ^{

        [NSThread sleepForTimeInterval:15];

        NSLog(@"第三阶段执行完毕");

    

    });

dispatch_group_notify(group, dispatch_get_main_queue(), ^{

       

        NSLog(@"全部阶段执行完毕");

    });


2015-07-15 21:25:51.851 GrandCentralDispatch__GCD[504:14673] 第一阶段执行完毕

2015-07-15 21:25:56.850 GrandCentralDispatch__GCD[504:14676] 第二阶段执行完毕

2015-07-15 21:26:01.854 GrandCentralDispatch__GCD[504:14674] 第三阶段执行完毕

2015-07-15 21:26:01.855 GrandCentralDispatch__GCD[504:14493] 全部阶段执行完毕



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值