美文网首页
GCD使用快速查询

GCD使用快速查询

作者: 笔寂晓才 | 来源:发表于2017-03-22 21:45 被阅读12次

1、dispatch_queue_create

第一个参数是队列名,第二个参数是队列的属性(优先级、执行顺序)

系统默认就有一个串行队列main_queue和并行队列global_queue

2、

dispatch_queue_t globalQ = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_queue_t mainQ = dispatch_get_main_queue();

也可以手动创建一个串行、并行队列

dispatch_queue_t myQueue = dispatch_queue_create(queueName, DISPATCH_QUEUE_SERIAL);

(老版本用NULL代替DISPATCH_QUEUE_SERIAL)

dispatch_queue_t myQueue = dispatch_queue_create(queueName, DISPATCH_QUEUE_CONCURRENT);

3、

在global_queue中做一些long-running的任务,完成后在main_queue中更新UI

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

// long-running task

dispatch_async(dispatch_get_main_queue(), ^{

// update UI

});

});

dispatch_sync 程序会暂停,等block执行完成才会继续。

dispatch_async 程序直接就过了。

4、监听一组任务是否完成,完成后得到通知

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group, queue, ^{

[NSThread sleepForTimeInterval:6];

NSLog(@"group1 [NSThread sleepForTimeInterval:6];");

});

dispatch_group_async(group, queue, ^{

[NSThread sleepForTimeInterval:3];

NSLog(@"group2 [NSThread sleepForTimeInterval:3];");

});

dispatch_group_async(group, queue, ^{

[NSThread sleepForTimeInterval:1];

NSLog(@"group3 [NSThread sleepForTimeInterval:1];");

});

dispatch_group_notify(group, dispatch_get_main_queue(), ^{

NSLog(@"main thread.");

});

dispatch_release(group);

5、在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行

应用场景:多个并发的时候,写操作必须是单独进行的,可以用这个。

dispatch_barrier_async的顺序执行还是依赖queue的类型啊,queue的类型必须为dispatch_queue_create创建

6、

dispatch_apply(5, globalQ, ^(size_t index) {

// 执行5次

});

7、dispatch_once这个函数,它可以保证整个应用程序生命周期中某段代码只被执行一次!

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

// code to be executed once

});

8、不是延时执行,是延迟提交到队列

double delayInSeconds = 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

});

9、设定给定对象的目标队列

比如说有两个队列dispatchA和dispatchB,这时把dispatchA指派到dispatchB:

dispatch_set_target_queue(dispatchA, dispatchB);

那么dispatchA上还未运行的block会在dispatchB上运行。

10、暂停、恢复队列

这时如果暂停dispatchA运行:dispatch_suspend(dispatchA);

则只会暂停dispatchA上原来的block的执行,dispatchB的block则不受影响。而如果暂停dispatchB的运行,则会暂停dispatchA的运行。

dispatch_resume(dispatchA);

恢复队列

11、

dispatch_get_current_queue()获取当前队列

dispatch_queue_get_label()获取队列的名字,如果队列没有名字,返回NULL

相关文章

  • GCD使用快速查询

    1、dispatch_queue_create 第一个参数是队列名,第二个参数是队列的属性(优先级、执行顺序) 系...

  • iOS面试--GCD常见用法

    项目中常见的GCD用法有已下几种: 1.GCD栅栏函数2.GCD快速迭代(遍历)3.GCD队列组的使用 1.GCD...

  • 无标题文章

    iOS 缓存 快速集成环信 技术文档 Masonry简单使用 MJExtension简单使用 GCD基本使用 gi...

  • iOS多线程之NSOpearation

    在 iOS 开发中,异步操作通常使用 GCD 的方式来完成,GCD 可以简单快速完成异步操作,当如果涉及到高级的操...

  • 自用算法模板(JAVA版)

    一、数论 1)GCD GCD(求最大公约数) QGCD(快速GCD) extGCD(拓展GCD,解决ax + by...

  • iOS-多线程:GCD

    GCD 简介 GCD 任务和队列 GCD 的使用步骤 GCD 的基本使用(6种不同组合区别) GCD 线程间的通信...

  • 16.ES的查询

    查询 ES是功能非常强大的搜索引擎,使用它的目的就是为了快速的查询到需要的数据查询分类:基本查询:使用ES内置的查...

  • Python 快速教程:尾声

    *注:采转归档,自己学习查询使用 Python 快速教程:尾声

  • Python 快速教程(基础篇)

    注:采转归档,自己学习查询使用 Python 快速教程(基础篇01):Hello WorldPython 快速教程...

  • iOS多线程--彻底学会多线程之『GCD』

    GCD 文章目录 GCD简介 任务和队列 GCD的使用步骤 队列的创建方法 任务的创建方法 GCD的基本使用 并行...

网友评论

      本文标题:GCD使用快速查询

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