GCD10: 用GCD构建自己的分派队列
2014-11-06 17:34
232 查看
想要创建你自己的、独特命名的分派队列:
使用 dispatch_queue_create 函数。
讨论:
利用 GCD,你可以创建你自己的串行分派队列:
我们将使用 dispatch_queue_create 函数创建串行队列。这个函数的第一个参数是 C 字符串(char *),它将唯一标识系统中的串行队列。我强调系统的原因是这个标识符是一个全系统标识符,意味着你的 APP 创建了一个新的带有 serialQueue1 标识符的串行队列,和别人的 APP 的标识符相同,GCD 无法确定创建一个新的有相同命名的串行队列的结果。因为这 一点,Apple 强烈推荐你使用反向 DNS 格式的标识符,反向 DNS 标识符通常按照这样的方法构建:com.COMPANY.PRODUCT.IDENTIFIER。例如,我可以创建 2 个串行队列并分别命名为:
创建了串行队列之后,你可以开始使用各种 GCD 功能向它分配任务。一旦自己创建的串行队列使用完成工作后,你必须使用 dispatch_release 释放它。
例子:
我们可以修正同样的模板代买来使用dispatch_async_f 函数而不是dispatch_async 函数,就像这样:
使用 dispatch_queue_create 函数。
讨论:
利用 GCD,你可以创建你自己的串行分派队列:
我们将使用 dispatch_queue_create 函数创建串行队列。这个函数的第一个参数是 C 字符串(char *),它将唯一标识系统中的串行队列。我强调系统的原因是这个标识符是一个全系统标识符,意味着你的 APP 创建了一个新的带有 serialQueue1 标识符的串行队列,和别人的 APP 的标识符相同,GCD 无法确定创建一个新的有相同命名的串行队列的结果。因为这 一点,Apple 强烈推荐你使用反向 DNS 格式的标识符,反向 DNS 标识符通常按照这样的方法构建:com.COMPANY.PRODUCT.IDENTIFIER。例如,我可以创建 2 个串行队列并分别命名为:
com.pixolity.GCD.serialQueue1 com.pixolity.GCD.serialQueue2
创建了串行队列之后,你可以开始使用各种 GCD 功能向它分配任务。一旦自己创建的串行队列使用完成工作后,你必须使用 dispatch_release 释放它。
例子:
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_f 函数而不是dispatch_async 函数,就像这样:
void firstIteration(void *paramContext){ NSUInteger counter = 0; for (counter = 0; counter < 5; counter++){ NSLog(@"First iteration, counter = %lu", (unsigned long)counter); } } void secondIteration(void *paramContext){ NSUInteger counter = 0; for (counter = 0; counter < 5; counter++){ NSLog(@"Second iteration, counter = %lu", (unsigned long)counter); } } void thirdIteration(void *paramContext){ NSUInteger counter = 0; for (counter = 0; counter < 5; counter++){ NSLog(@"Third iteration, counter = %lu", (unsigned long)counter); } } - (BOOL) application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ dispatch_queue_t firstSerialQueue = dispatch_queue_create("com.pixolity.GCD.serialQueue1", 0); dispatch_async_f(firstSerialQueue, NULL, firstIteration); dispatch_async_f(firstSerialQueue, NULL, secondIteration); dispatch_async_f(firstSerialQueue, NULL, thirdIteration); dispatch_release(firstSerialQueue); self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; return YES; }
相关文章推荐
- IOS开发(66)之构建自己的分派队列
- 队列希望IOS开发(66)之构建自己的分派队列
- iOS学习笔记10(5)—GCD实战一:使用串行队列实现简单的预加载
- 自己动手构建无锁的并发容器(栈和队列)
- 【深度学习】笔记7: CNN训练Cifar-10技巧 ---如何进行实验,如何进行构建自己的网络模型,提高精度
- 块和GCD分派队列
- GCD自己创建串行队列和并行队列
- 自己动手构建无锁的并发容器(续篇)——基于单向链表实现的无锁队列
- 谷歌开源项目Chromium的源码获取与项目构建(Win7+vs10/vs13)
- docker筑基篇-03-使用docker-commit构建自己的镜像
- 一步步开发自己的博客 .NET版(10、前端对话框和消息框的实现)
- Ubuntu 上安装Asterisk, FreePBX 构建自己的电话局
- maven命令构建自己的java项目
- Java 集合深入理解(10):Deque 双端队列
- Java企业面试算法新得体会之2栈和队列问题10问
- 构建自己的不可替代性
- Git+GitHub,构建自己的开源仓库之Git分支
- Objective C 高级进阶 — GCD队列终结篇
- 利用 Composer 一步一步构建自己的 PHP 框架(三)——设计 MVC
- ROS进阶学习手记 10 - 搭建自己的TurtleBot(3)- Velocity Calibration