iOS GCD的用法
2016-03-17 17:59
477 查看
在主线程上执行:同步执行
在后台执行:也就是异步执行
GCD队列的用法:
1,异步队列:
2,同步队列:
GCD group的用法
1,同步group:
1,异步group:
使用dispatch_barrier_async控制并发任务
在并发任务队列中,可以使用dispatch_barrier_async来对任务做分隔保护,dispatch_barrier_async之前加入到队列的任务执行完成后,才能执行后续加入的任务。barrier英文意思为障碍物,因此我们可以理解为执行完前面的任务才能越过障碍物执行后续的任务。
dispatch_async(dispatch_get_main_queue(), ^{ });
在后台执行:也就是异步执行
dispatch_async(dispatch_get_global_queue(0, 0), ^{ });
GCD队列的用法:
1,异步队列:
dispatch_queue_t queue = dispatch_queue_create("gaobo", DISPATCH_QUEUE_CONCURRENT); dispatch_async(queue, ^{ NSLog(@"1"); }); dispatch_async(queue, ^{ NSLog(@"2"); }); dispatch_async(queue, ^{ NSLog(@"3"); }); dispatch_async(queue, ^{ NSLog(@"4"); }); dispatch_async(queue, ^{ NSLog(@"5"); });
2,同步队列:
dispatch_queue_t queue = dispatch_queue_create("gaobo", DISPATCH_QUEUE_SERIAL); dispatch_async(queue, ^{ NSLog(@"1"); }); dispatch_async(queue, ^{ NSLog(@"2"); }); dispatch_async(queue, ^{ NSLog(@"3"); }); dispatch_async(queue, ^{ NSLog(@"4"); }); dispatch_async(queue, ^{ NSLog(@"5"); });
GCD group的用法
1,同步group:
dispatch_queue_t queue = dispatch_queue_create("gaobo", DISPATCH_QUEUE_SERIAL); dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, queue, ^{ NSLog(@"Do some work 1 here"); }); dispatch_group_async(group, queue, ^{ NSLog(@"Do some work 2 here"); }); dispatch_group_async(group, queue, ^{ NSLog(@"Do some work 3 here"); }); dispatch_group_async(group, queue, ^{ NSLog(@"Do some work 4 here"); }); dispatch_group_async(group, queue, ^{ NSLog(@"Do some work 5 here"); }); dispatch_group_notify(group, queue, ^{ NSLog(@"group complete"); });
1,异步group:
dispatch_queue_t queue = dispatch_queue_create("gaobo", DISPATCH_QUEUE_CONCURRENT); dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, queue, ^{ NSLog(@"Do some work 1 here"); }); dispatch_group_async(group, queue, ^{ NSLog(@"Do some work 2 here"); }); dispatch_group_async(group, queue, ^{ NSLog(@"Do some work 3 here"); }); dispatch_group_async(group, queue, ^{ NSLog(@"Do some work 4 here"); }); dispatch_group_async(group, queue, ^{ NSLog(@"Do some work 5 here"); }); dispatch_group_notify(group, queue, ^{ NSLog(@"group complete"); });
使用dispatch_barrier_async控制并发任务
在并发任务队列中,可以使用dispatch_barrier_async来对任务做分隔保护,dispatch_barrier_async之前加入到队列的任务执行完成后,才能执行后续加入的任务。barrier英文意思为障碍物,因此我们可以理解为执行完前面的任务才能越过障碍物执行后续的任务。
dispatch_queue_t queue = dispatch_queue_create("com.yourdomain.TestQueue", DISPATCH_QUEUE_CONCURRENT); dispatch_async(queue, ^{ [NSThread sleepForTimeInterval:1]; NSLog(@"Do some work 1 here"); }); dispatch_async(queue, ^{ [NSThread sleepForTimeInterval:1]; NSLog(@"Do some work 2 here"); }); dispatch_async(queue, ^{ [NSThread sleepForTimeInterval:1]; NSLog(@"Do some work 3 here"); }); dispatch_barrier_async(queue, ^{ NSLog(@"Do some work 4 here"); }); dispatch_async(queue, ^{ [NSThread sleepForTimeInterval:1]; NSLog(@"Do some work 5 here"); });
相关文章推荐
- iOS应用程序拨打电话
- iOS之轻松上手block
- iOS多线程之GCD小记
- iOS 定义View任意角为圆角
- IOS之@property 的理解
- pod小问题
- iOS -- 处理推送消息
- iOS项目中安装和使用 Cocoapods
- 关于iOS的学习路线图 (分享)
- iOS用CGContextRef画图
- iOS 时区问题总结 NSTimeZone
- ios开发模仿CocoaChina精选代码使用masonry计算cell的高度总结
- 【原】IOS合并lib(.a)库的终极可用方法(可用于解决duplicate symbol静态库冲突)
- IOS tabbar用法
- iOS: 如何在工程中设置 DEBUG 模式?
- iOS分享【OC】—— 浅谈 GCD
- storyboard 的一些简单应用
- IOS学习 NSNavigationController 自定义:左右按钮、中间文字、背景图片
- 3.2-nagios自定义监控系统磁盘脚本
- iOS 定义多个参数函数的写法