GCD整理

系统提供的dispatch方法:

为了方便地使用 GCD,苹果提供了一些方法方便我们将 block 放在主线程 或 后台线程执行,或者延后执行。使用的例子如下:

//  后台执行:

dispatch_async(dispatch_get_global_queue(0,0), ^{

// something

});

// 主线程执行:

dispatch_async(dispatch_get_main_queue(), ^{

// something

});

// 一次性执行:

staticdispatch_once_tonceToken;

dispatch_once(&onceToken, ^{

// code to be executed once

});

// 延迟 2 秒执行:

doubledelayInSeconds =2.0;

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds *NSEC_PER_SEC);

dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

// code to be executed on the main queue after delay

});

dispatch_queue_t 也可以自己定义,如要要自定义 queue,可以用 dispatch_queue_create 方法,示例如下:

dispatch_queue_turls_queue = dispatch_queue_create("blog.devtang.com",NULL);

dispatch_async(urls_queue, ^{

// your code

});

dispatch_release(urls_queue);

另外,GCD 还有一些高级用法,例如让后台 2 个线程并行执行,然后等 2 个线程都结束后,再汇总执行结果。这个可以用 dispatch_group, dispatch_group_async 和 dispatch_group_notify 来实现,示例如下:

dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{

// 并行执行的线程一

});

dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{

// 并行执行的线程二

});

dispatch_group_notify(group, dispatch_get_global_queue(0,0), ^{

// 汇总结果

});

附:GCD详解

or 唐巧技术博客



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 简介 GCD(Grand Central Dispatch)是在macOS10.6提出来的,后来在iOS4.0被引...
    sunmumu1222阅读 910评论 0 2
  • iOS中GCD的使用小结 作者dullgrass 2015.11.20 09:41*字数 4996阅读 20199...
    DanDanC阅读 929评论 0 0
  • 本篇博客共分以下几个模块来介绍GCD的相关内容: 多线程相关概念 多线程编程技术的优缺点比较? GCD中的三种队列...
    dullgrass阅读 37,921评论 30 236
  • 大约两个月前,我停用了朋友圈,并且微信群发了好友。 在那之后的2个小时,断断续续有好友发来微信,有关心慰问的,有刨...
    尔东女阅读 1,100评论 16 22
  • 第三位面 “记住,我们天使族的希望已经不多了。还记得大祭司说过的吗?六翼天使就是希望。现在,所有人带着自己...
    70d9bc5d3ff9阅读 249评论 2 5