ios之dispatch_async
来源:互联网 发布:java 锁 互斥量 编辑:程序博客网 时间:2024/05/11 20:32
GCD的先进先出队列FIFO,称为dispatch queue;
dispatch queue 分为三种类型:
serial,又称 private dispatch queues,同时只执行一个任务。
concurrent ,又称为global dispatch queue,可以并发地执行多个任务,但执行完成的顺序是随机的。
main dispatch queue,是在应用程序主线程上执行任务。
1.dispatch_async 异步调度
dispatch_get_global_queue(0,0),//获取全局队列
dispatch_get_main_queue()//获取 main dispatch queue .
获取一个全局队列是接受两个参数,第一个是我分配的事物处理程序块队列优先级。分高低和默认,0为默认2为高,-2为低
- #define DISPATCH_QUEUE_PRIORITY_HIGH 2
- #define DISPATCH_QUEUE_PRIORITY_DEFAULT 0
- #define DISPATCH_QUEUE_PRIORITY_LOW (-2)
- dispatch_async(dispatch_get_global_queue(0,0) ,^{block主体});
2.dispatch_sync 同步调度
dispatch_sync(queue,task) 会阻塞当前线程,直到完成任务。
dispatch_queue_t queue = dispatch_queue_create("com.example.MyQueue", NULL); //获取serial queue .
dispatch_queue_t queue = dispatch_queue_create("com.example.MyQueue", NULL); // 串行queue
dispatch_set_context(queue, @"xxx");
dispatch_set_finalizer_f(queue, &myFinalizerFunction);
for (int i = 0; i<10; i++) {
dispatch_async(queue, ^{
NSLog(@"%d",i);
});
}
NSLog(@"waiting");
dispatch_sync(queue, ^{
NSLog(@"wait done");
});
dispatch_release(queue);
2011-07-05 17:54:35.479 ttt[44203:207] waiting
2011-07-05 17:54:35.479 ttt[44203:1803] 0
2011-07-05 17:54:35.481 ttt[44203:1803] 1
2011-07-05 17:54:35.482 ttt[44203:1803] 2
2011-07-05 17:54:35.482 ttt[44203:1803] 3
2011-07-05 17:54:35.483 ttt[44203:1803] 4
2011-07-05 17:54:35.483 ttt[44203:1803] 5
2011-07-05 17:54:35.484 ttt[44203:1803] 6
2011-07-05 17:54:35.484 ttt[44203:1803] 7
2011-07-05 17:54:35.485 ttt[44203:1803] 8
2011-07-05 17:54:35.485 ttt[44203:1803] 9
2011-07-05 17:54:35.486 ttt[44203:207] wait done
2011-07-05 17:54:35.487 ttt[44203:1803] xxx
从以上代码可以看出dispatch_async 与 dispatch_sync的区别。
2.dispatch_group_async的使用
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
- 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:1];
- NSLog(@"group1");
- });
- dispatch_group_async(group, queue, ^{
- [NSThread sleepForTimeInterval:2];
- NSLog(@"group2");
- });
- dispatch_group_async(group, queue, ^{
- [NSThread sleepForTimeInterval:3];
- NSLog(@"group3");
- });
- dispatch_group_notify(group, dispatch_get_main_queue(), ^{
- NSLog(@"updateUi");
- });
- dispatch_release(group);
- ios之dispatch_async
- iOS开发之:dispatch_async 与 dispatch_get_global_queue 的使用方法
- iOS开发之:dispatch_async 与 dispatch_get_global_queue 的使用方法
- iOS开发之:dispatch_async 与 dispatch_get_global_queue 的使用方法
- iOS开发之:dispatch_async 与 dispatch_get_global_queue 的使用方法
- iOS开发之:dispatch_async 与 dispatch_get_global_queue 的使用方法
- iOS 多线程初学习之dispatch_async(dispatch_get_main_queue(), ^{})
- iOS开发之:dispatch_async 与 dispatch_get_global_queue 的使用方法
- iOS开发之:dispatch_async 与 dispatch_get_global_queue 的使用方法
- iOS开发之:dispatch_async 与 dispatch_get_global_queue 的使用方法
- ios dispatch_async使用
- iOS GCD dispatch_async dispatch_get_main_queue
- iOS GCD dispatch_async 多线程
- iOS多线程dispatch_async
- dispatch_async
- dispatch_async
- dispatch_async
- iOS GCD 多核编程(dispatch_async、dispatch_queue)
- Leetcode Algorithm No.241 Different Ways to Add Parentheses
- pip安装PIL模块的辛酸
- 用位运算实现四则运算之加减乘除
- ssh server连接手机,并切换到root用户
- Maven
- ios之dispatch_async
- Android命名规范
- TCP/IP协议第一章阅读笔记
- iOS之单例模式
- Java正则去除文本中的标点符号
- 【图灵图书】杀入“黄榜”,你最中意的书可在其中?
- [Elasticsearch] 数据建模 - 处理关联关系(2)
- springmvc集成shiro注解权限
- 配置文件读写接口代码