GCD

GCD

只有两种队列:一种是串行(一种),一种是并发队列(四种)

  • Serial 串行队列,先创建dispatch_queue_creat(const char *label,dispatch_queue_attr_t attr))(系统默认的主队列)

  • Concurrent 并发队列 dispatch_queue_t dispatch_get_global_queue( long priority,unsigned long flags);
    第一个参数:用于指定优先级
    第二个参数:目前未使用并且应该始终为0

 #define    DISPATCH_QUEUE_PRIORITY_HIGH

 #define    DISPATCH_QUEUE_PRIORITY_DEFAULT

 #define    DIPATCH_QUEUE_PRIORITY_LOW

 #define    DISPATCH_QUEUE_PRIORITY_BACKGROUND

主队列:Main dispatch queue

dispatch_queue_t dispatch_get_main_queue(void)

常用方法

  • 异步派发
    void dispatch_async(dispatch_queue_t queue,dispatch_block_t block);

  • 同步派发
    void diospatch_sync (dispatch_queue_t queue,dispatch_block_t block);


一个很重要的方法
dispatch_async(sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT)^{ //耗时的操作
dispatch_async(dispatch_get_main_queue(),^{
//更新界面
});
});

障碍只用于自定义的并发队列
只有并发序列才可以用dispatch_barrier_sync,屏障的作用就是只有其前面的任务全部执行完毕后,才会执行它本身和以后的任务

单例

static dispatch_once 很有用 ,使用单例,必须用dispatch_once来声明(保证一个单例的地址不管在哪个线程中使用都是一致的),静态声明比全局声明更方便,

如果某些任务需要另一些任务完成后才执行,可以使用dispatch_group_t

阅读更多
个人分类: ios学习
想对作者说点什么? 我来说一句

C/C++算法实例 数论算法

2009年04月10日 21KB 下载

iOS GCD详解

2014年12月04日 89KB 下载

GCDGroupTest Demo代码

2013年05月12日 62KB 下载

没有更多推荐了,返回首页

不良信息举报

GCD

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭