iOS 要求执行完 任务A,B 后才能执行任务 C

NSBlockOperation can't handle asynchronous operations。

A,B,C是同步执行的任务

用 NSOpertion 和 NSOpertionQueue 处理

NSOperationQueue *queue = [[NSOperationQueue alloc] init]; // 创建3个操作 NSOperation *a = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@”operationA---“);}]; NSOperation *b = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@”operationB---“);}]; NSOperation *c = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@”operationC---“);}]; // 添加依赖 [c addDependency:a]; [c addDependency:b]; // 执行操作 [queue addOperation:a]; [queue addOperation:b]; [queue addOperation:c];

A,B,C是异步执行的任务,eg.网络请求

Dispatch Group 会在整个组的任务都完成时通知你。这些任务可以是同
步的,也可以是异步的,即便在不同的队列也行。
`
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ // 1

    __block NSError *error;
    dispatch_group_t downloadGroup = dispatch_group_create(); // 2

    for (NSInteger i = 0; i < 3; i++) {
        NSURL *url;
        switch (i) {
            case 0:
                url = [NSURL URLWithString:kOverlyAttachedGirlfriendURLString];
                break;
            case 1:
                url = [NSURL URLWithString:kSuccessKidURLString];
                break;
            case 2:
                url = [NSURL URLWithString:kLotsOfFacesURLString];
                break;
            default:
                break;
        }

        dispatch_group_enter(downloadGroup); // 3
        Photo *photo = [[Photo alloc] initwithURL:url
                              withCompletionBlock:^(UIImage *image, NSError *_error) {
                                  if (_error) {
                                      error = _error;
                                  }
                                  dispatch_group_leave(downloadGroup); // 4
                              }];

        [[PhotoManager sharedManager] addPhoto:photo];
    }
    dispatch_group_wait(downloadGroup, DISPATCH_TIME_FOREVER); // 5
    dispatch_async(dispatch_get_main_queue(), ^{ // 6
        if (completionBlock) { // 7
            completionBlock(error);
        }
    });
});

`

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • NSThread 第一种:通过NSThread的对象方法 NSThread *thread = [[NSThrea...
    攻城狮GG阅读 859评论 0 3
  • 在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项。当然也会给出几种多线程的案...
    张战威ican阅读 627评论 0 0
  • 概述 这篇文章中,我不会说多线程是什么、线程和进程的区别、多线程有什么用,当然我也不会说什么是串行、什么是并行等问...
    hashakey阅读 314评论 0 0
  • 首先明确线程和进程的关系和区别: 一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多...
    kkj1996阅读 217评论 0 0
  • 我亲戚叫我和他开一个小型的涂料厂,生产涂料,就是刮完腻子以后再刷一层那种漆,他是搞技术出身的,没有销售经验,我也没...
    六爷有话说阅读 266评论 0 0