GCD编程简介dispatch_group_async
来源:互联网 发布:魔法王座座骑升阶数据 编辑:程序博客网 时间:2024/06/14 17:57
一、用 GCD 将任务分组
GCD让我们创建组,这些组允许你把任务放到一个位置,然后全部运行,运行结束后
Tags: dispatch_async, dispatch_group_t, GCD
会从 GCD 收到一个通知。这一点有很多有价值的用途。例如,假设你有一个 UI-Base APP,想在 UI 上重新加载组件。你有一个表格视图,一个滚动视图,一个图片视图,就要 用这些方法加载这些组建的内容.
在 GCD 中使用组的时候你应该知道 4 个函数:
dispatch_group_create
创建一个组句柄。一旦你使用完了这个组句柄,应该使用 dispatch_release 函数将其释 放。
dispatch_group_async
在一个组内提交一个代码块来执行。必须明确这个代码块属于哪个组,必须在哪个派送队列上执行。
dispatch_group_notify
允许你提交一个 Block Object。一旦添加到这个组的任务完成执行之后,这个 Block Object 应该被执行。这个函数也允许你明确执行 Block Object 的分派队列。
dispatch_release这个函数释放那任何一个你通过 dispatch_group_create 函数创建的分派小组。
1、dispatch_group_async
dispatch_group_t taskGroup=dispatch_group_create();
dispatch_queue_t mainQueue1=dispatch_get_main_queue();
//reload the table view on the main queue
dispatch_group_async(taskGroup, mainQueue1, ^{
//method 1
NSLog(@"method1—–");
});
dispatch_group_async(taskGroup, mainQueue1, ^{
//method 2
NSLog(@"method2—-");
});
//at the end when we are done,dispatch the following block
dispatch_group_notify(taskGroup, mainQueue1, ^{
NSLog(@"finished");
[[[UIAlertView alloc] initWithTitle:@"Finished"
message:@"All tasks are finished" delegate:nil
cancelButtonTitle:@"OK" otherButtonTitles:nil, nil] show];
});
//we are done with the group
dispatch_release(taskGroup);
2、也可以分派异步的 C 函数到一个分派组来使用 dispatch_group_async_f 函数
dispatch_group_t taskGroup = dispatch_group_create();
dispatch_queue_t mainQueue = dispatch_get_main_queue();
dispatch_group_async_f(taskGroup, mainQueue,
(__bridge void *)self, reloadAllComponents);
/* At the end when we are done, dispatch the following block */ dispatch_group_notify(taskGroup, mainQueue, ^{
/* Do some processing here */[[[UIAlertView alloc] initWithTitle:@"Finished"
});
/* We are done with the group */
dispatch_release(taskGroup);
二、用 GCD 构建自己的分派队列
利用 GCD,你可以创建你自己的串行分派队列,串行调度队列按照先入先出(FIFO)的原则运行它们的任务。然而,串行队列上的异步任务不会在主 线程上执行,这就使得串行队列极需要并发 FIFO 任务。所有提交到一个串行队列的同步 任务会在当前线程上执行,在任何可能的情况下这个线程会被提交任务的代码使用。但是提 交到串行队列的异步任务总是在主线程以外的线程上执行
dispatch_queue_t firstSerialQueue = dispatch_queue_create("com.pixolity.GCD.serialQueue1", 0); dispatch_async(firstSerialQueue, ^{
NSUInteger counter = 0;
for (counter = 0; counter < 5; counter++){
NSLog(@"First iteration, counter = %lu", (unsigned long)counter); }
});
dispatch_async(firstSerialQueue, ^{
NSUInteger counter = 0;
for (counter = 0;counter < 5;counter++){
NSLog(@"Second iteration, counter = %lu", (unsigned long)counter);
} });
dispatch_async(firstSerialQueue, ^{
NSUInteger counter = 0;
for (counter = 0;counter < 5;counter++){
NSLog(@"Third iteration, counter = %lu", (unsigned long)counter);
} });
dispatch_release(firstSerialQueue);
- GCD编程简介dispatch_group_async
- GCD入门介绍四---- dispatch_group_async和dispatch_barrier_async
- GCD 信号量控制并发(dispatch_semaphore)以及dispatch_group_async
- GCD 信号量控制并发(dispatch_semaphore)以及dispatch_group_async
- #iOS多线程编程及GCD简介
- GCD简介
- GCD简介
- 简介gcd
- GCD简介
- GCD简介
- GCD简介
- GCD编程(封装GCD)
- GCD编程
- GCD编程
- GCD编程
- GCD编程
- GCD 编程
- dispatch_after dispatch_group_async dispatch_once
- Web应用程序设计十个建议
- Flashback Database
- Ubuntu下MySQL的安装及远程连接配置等配置
- 创建表的时候创建索引
- SQL巧用XML PATH来生成符合规则的查询结果集
- GCD编程简介dispatch_group_async
- 设计模式六大原则(1):单一职责原则
- 排序算法
- 手机刷机数据丢失如何恢复
- 秒杀多线程第十五篇 关键段,事件,互斥量,信号量的“遗弃”问题
- ORACLE存储过程编码规范
- Android实现自定义带文字和图片的Button
- 一位39岁程序员的困惑:知道得越多编程越慢怎么办?
- JDBC-MYSQL源码学习1