[iOS] GCD任务分发
来源:互联网 发布:双拼域名.com 编辑:程序博客网 时间:2024/06/06 07:43
[iOS]GCD任务分发
GCD 任务分发
/** 前缀非常统一 dispatch_ dispatch_async_f(<#dispatch_queue_t queue#>, <#void *context#>, <#dispatch_function_t work#>) 用C++ 的方式 和C的方式 [串行] GCD-NSThread+Block dispatch_queue_t curQueue = dispatch_get_main_queue(); 使用主队列(跟主线程相关联的队列) 主队列是GCD自带的一种特殊的串行队列,放在主队列中的任务,都会放到主线程中执行 使用dispatch_get_main_queue()获得主队列 dispatch_queue_t curQueue = dispatch_queue_create(<#const char *label#>, <#dispatch_queue_attr_t attr#>); 队列名称, 队列属性,一般用NULL 非ARC需释放 dispatch_release(curQueue); [并发] dispatch_queue_t curQueue = dispatch_get_global_queue(<#dispatch_queue_priority_t priority#>, <#unsigned long flags#>) GCD默认已经提供了全局的并发队列,供整个应用使用,不需要手动创建 使用dispatch_get_global_queue函数获得全局的并发队列 这里flags是保留字,现在没用,以后可能有用,传0 */ // 创建队列 dispatch_queue_t curQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); // 优先级高 dispatch_queue_t curQueue2 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT , 0);// 优先级中 dispatch_queue_t curQueue3 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW , 0); // 优先级低 // 用异步的方式 分发任务 // 任务1 // 不同队列之间“并发”执行,每个队列里的任务“串行”执行,并且先加进队列的任务先执行 dispatch_async(curQueue, ^{ NSLog(@"当前线程:%@",[NSThread currentThread]); //[self fristWork]; }); // 任务2 dispatch_async(curQueue2, ^{ NSLog(@"当前线程:%@",[NSThread currentThread]); //[self secondWork]; }); // 任务3 dispatch_async(curQueue3, ^{ NSLog(@"当前线程:%@",[NSThread currentThread]); //[self thirdWork]; }); /** 只执行一次操作 */ // 创建队列 dispatch_queue_t mainQueue = dispatch_get_main_queue(); // 创建静态全局变量onceToken static dispatch_once_t onceToken; void(^executedOnlyOnce)(void) = ^{ NSLog(@"执行一次!"); }; // 只执行一次操作 dispatch_once的使用 dispatch_once(&onceToken, ^{ dispatch_async(mainQueue, executedOnlyOnce); NSLog(@"once"); }); // 后面程序检测到与地址&onceToken相同,就不会执行 dispatch_once(&onceToken, ^{ dispatch_async(mainQueue, executedOnlyOnce); NSLog(@"once"); });
子线程中执行操作后,若要更新UI,则需要通知主线程刷新;
// 在子线程中执行操作 dispatch_async(dispatch_get_global_queue(0, 0), ^{ // 处理耗时操作 dispatch_async(dispatch_get_main_queue(), ^{ // 通知主线程刷新 }); });
0 0
- [iOS] GCD任务分发
- GCD之任务分发函数进阶
- iOS:GCD进行延迟执行任务
- IOS开发(65)之GCD任务分组
- iOS GCD同步队列和同步任务 堵塞和死锁
- iOS 开发 多线程详解之GCD任务和队列
- iOS 使用GCD多线程技术来处理耗时任务
- erlang任务分发
- 任务分发系统gearman
- Celery 分发任务
- Gearman 分发任务处理
- 任务分发框架 gearmand
- Gearman-任务分发系统
- RabbitMQ任务分发
- iOS gcd
- iOS gcd
- iOS gcd
- ios gcd
- Linux常用命令大全
- gdb调试技术
- 推荐每天早上起来认真的读一遍!
- Kidde PI9000 fire & CO alarm
- java向C++发送字符串数据
- [iOS] GCD任务分发
- Android插件开发机制
- double与float的区别
- 从一段代码说开,谈学习<<C++ Propertiest>>之所得,帮助大家学习开发c++代码框架
- ASCII、ANSI、Unicode及UTF-8编码
- pushd命令使用
- Tez安装
- centos系统svn服务器端的安装
- gstreamer的gst-inspect 和gst-launch