关闭

GCD

27人阅读 评论(0) 收藏 举报
分类:

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:87次
    • 积分:23
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档
    阅读排行
    评论排行