iOS开发 多任务之间具有依赖关系实现方案
2016-09-08 18:11
513 查看
在实际开发过程中,有时候需要设置任务之间的依赖关系,iOS主要有两种方案,一种是基于GCD,另一种是基于NSOperation,下面分别介绍。
/**任务1,2并行执行,执行完后任务3执行*/
1.基于GCD的实现方案
/**方法1*/
/*方法2*/
/*
*dispatch_barrier_async 会等待当前队列的任务执行完之后再执行dispatch_barrier_async(myqueue, ^{
NSLog(@"任务3");
});中定义的任务,该任务执行完成后,会继续执行队列后面的任务。
*/
任务1,2并行执行,执行完后任务3执行,执行完后任务4,5并行执行。
2.基于NSOPeration实现
/**任务1,2并行执行,执行完后任务3执行*/
1.基于GCD的实现方案
/**方法1*/
dispatch_group_t group =dispatch_group_create(); dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{ NSLog(@"任务1"); }); dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{ NSLog(@"任务2"); }); dispatch_group_notify(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{ NSLog(@"任务3"); });
/*方法2*/
/*
*dispatch_barrier_async 会等待当前队列的任务执行完之后再执行dispatch_barrier_async(myqueue, ^{
NSLog(@"任务3");
});中定义的任务,该任务执行完成后,会继续执行队列后面的任务。
*/
dispatch_queue_t myqueue =dispatch_queue_create("myqueue.queue",DISPATCH_QUEUE_CONCURRENT); dispatch_async(myqueue, ^{ NSLog(@"任务1"); }); dispatch_async(myqueue, ^{ NSLog(@"任务2"); }); dispatch_barrier_async(myqueue, ^{ NSLog(@"任务3"); }); dispatch_async(myqueue, ^{ NSLog(@"任务4"); }); dispatch_async(myqueue, ^{ NSLog(@"任务5"); });
任务1,2并行执行,执行完后任务3执行,执行完后任务4,5并行执行。
2.基于NSOPeration实现
NSBlockOperation *opration1 = [NSBlockOperationblockOperationWithBlock:^{ NSLog(@"任务1"); }]; NSBlockOperation *opration2 = [NSBlockOperationblockOperationWithBlock:^{ NSLog(@"任务2"); }]; NSOperationQueue *operationQueue = [[NSOperationQueuealloc] init]; [operationQueue addOperation:opration1]; [operationQueue addOperation:opration2]; NSBlockOperation *opration3 = [NSBlockOperationblockOperationWithBlock:^{ NSLog(@"任务3"); }]; [opration3 addDependency:opration1]; [opration3 addDependency:opration2]; [operationQueue addOperation:opration3];
相关文章推荐
- ios 字体设计
- iOS核心动画keypath
- iOS页面禁止侧滑返回
- [绍棠] iOS中 iOS10 权限崩溃问题
- IOS 获取当前对象所在的VC
- iOS开发问题:系统提示框是否同意获取当前位置提示框自动消失问题
- iOS开发中遇到的一个错误
- IOS 计时器暂停和开始 防止重复点击
- ios开发怎么获取输入的日期得到星期
- IOS隐藏键盘
- [绍棠] iOS 10 开发适配系列 之 权限Crash问题
- iOS 开发 RGB 色值转换
- iOS开发 ----- 加载动画之牛顿摆的实现
- iOS开发使用iconfont图片字体
- iOS开发之OCR光学识别储蓄卡以及信用卡
- iOS-自动生成模型属性代码
- ios播放多个PCM直播音频流,实现多人语音聊天
- Model-View-ViewModel for iOS
- iOS 将系统音乐库的文件缓存到沙河路径并上传服务器
- 添加预编译文件