iOS开发 多任务之间具有依赖关系实现方案

在实际开发过程中,有时候需要设置任务之间的依赖关系,iOS主要有两种方案,一种是基于GCD,另一种是基于NSOperation,下面分别介绍。

/**任务1,2并行执行,执行完后任务3执行*/

1.基于GCD的实现方案

/**方法1*/

[objc]view plaincopy

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");

});中定义的任务,该任务执行完成后,会继续执行队列后面的任务。

*/

[objc]view plaincopy

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实现

[objc]view plaincopy

NSBlockOperation*opration1= [NSBlockOperationblockOperationWithBlock:^{

NSLog(@"任务1");

}];

NSBlockOperation*opration2= [NSBlockOperationblockOperationWithBlock:^{

NSLog(@"任务2");

}];

NSOperationQueue*operationQueue = [[NSOperationQueuealloc]init];

[operationQueueaddOperation:opration1];

[operationQueueaddOperation:opration2];

NSBlockOperation*opration3= [NSBlockOperationblockOperationWithBlock:^{

NSLog(@"任务3");

}];

[opration3addDependency:opration1];

[opration3addDependency:opration2];

[operationQueueaddOperation:opration3];

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • iOS中多线程编程工具主要有: NSThread NSOperation GCD 这三种方法都简单易用,各有千秋....
    liudhkk阅读 4,298评论 1 0
  • 一、前言 上一篇文章iOS多线程浅汇-原理篇中整理了一些有关多线程的基本概念。本篇博文介绍的是iOS中常用的几个多...
    nuclear阅读 6,256评论 6 18
  • 在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项。当然也会给出几种多线程的案...
    张战威ican阅读 3,772评论 0 0
  • NSThread 第一种:通过NSThread的对象方法 NSThread *thread = [[NSThrea...
    攻城狮GG阅读 4,308评论 0 3
  • 关于迷茫,我思考了很久,直到前几天...... 我的迷茫的起源: 作为一个大学毕业一年多的机械专业学生,我没办法不...
    半部春秋92阅读 2,801评论 0 0

友情链接更多精彩内容