美文网首页iOS知识点~m
iOS 要求执行完 任务A,B 后才能执行任务 C

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

作者: 陈鸿禧 | 来源:发表于2016-06-22 14:52 被阅读1724次

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

`

相关文章

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

    dispatch_queue_t queue = dispatch_get_global_queue(DISPAT...

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

    NSBlockOperation can't handle asynchronous operations。 A,...

  • iOS—多线程

    线程是用来执行任务的,线程彻底执行完任务A才能去执行任务B。为了同时执行两个任务,产生了多线程。 线程执行完毕就被...

  • 线程与进程

    线程 线程是用来执行任务的,线程彻底执行完任务A才能去执行任务B。为了同时执行两个任务,产生了多线程。 进程 进程...

  • 关于多线程的理解

    前言 线程是用来执行任务的,线程彻底执行完任务A才能去执行任务B。为了同时执行两个任务,产生了多线程。 1、什么是...

  • iOS开发多线程的概念

    1、了解多线程的思维 线程是用来执行任务的,线程彻底执行完任务A才能去执行任务B。为了同时执行两个任务,产生了...

  • UI(三十一)多线程-NSThread

    一、线程是用来执行任务的,线程彻底执行完任务A才能去执行任务B。为了同时执行两个任务,产生了多线程。 二、进程 1...

  • iOS - 多线程-NSThread

    一、线程是用来执行任务的,线程彻底执行完任务A才能去执行任务B。为了同时执行两个任务,产生了多线程。 二、进程 1...

  • iOS--多线程、GCD、NSOperation(转载)

    一、基本概念 线程是用来执行任务的,线程彻底执行完任务A才能执行任务B,为了同时执行两个任务,产生了多线程 1、进...

  • iOS--多线程、GCD、NSOperation、

    一、基本概念 线程是用来执行任务的,线程彻底执行完任务A才能执行任务B,为了同时执行两个任务,产生了多线程 1、进...

网友评论

  • 梁森的简书:使用group也可以使用notify
  • Sweet哞哞:您好,您在给线程添加依赖的时候 ,是不是写错了。应该是 b依赖于a,c依赖于b吧
    // 添加依赖
    [b addDependency:a];
    [c addDependency:b];

本文标题:iOS 要求执行完 任务A,B 后才能执行任务 C

本文链接:https://www.haomeiwen.com/subject/qaqndttx.html