ios之dispatch_async
2015-08-31 14:20
295 查看
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为低
[cpp] view
plaincopy
#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);
dispatch_group_async 实现监听一组任务是否完成,任务全部完成时,通知执行其他的操作。
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为低
[cpp] view
plaincopy
#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);
dispatch_group_async 实现监听一组任务是否完成,任务全部完成时,通知执行其他的操作。
相关文章推荐
- iOS---Xcode6.1标准Framework静态库制作方法
- IOS开发- 手机序列号 手机名称 版本等的获取
- 我的iOS高效编程秘诀—坚持编程习惯
- iOS 封装之 直播弹幕
- 一个ios不错的blog地址
- iOS 项目的完整命名方法以及去除项目警告方法
- 从零开始学 iOS 开发的15条建议
- IOS(CGGeometry)几何类方法总结
- 学习IOS高阶的方法
- ios7 滑动控件设置了frame还会滑动问题
- iOS中,在类的源文件(.m)中,@interface部分的作用?
- iOS中,在类的源文件(.m)中,@interface部分的作用?
- iOS代码常用的代码片段
- IOS之分析网易新闻存储数据(CoreData的使用,增删改查)
- ios 常用操作-1
- iOS警告收录及科学快速的消除方法
- 【IOS类扩展之日期操作】NSDate+Helpers
- iOS开发 - 判断程序第一次开启 以及 应用升级后第一打开的判断
- ios category
- iOS 关于Xcode上的Other linker flags