iOS 要求執(zhí)行完 任務(wù)A,B 后才能執(zhí)行任務(wù) C

NSBlockOperation can't handle asynchronous operations。

A,B,C是同步執(zhí)行的任務(wù)

用 NSOpertion 和 NSOpertionQueue 處理

NSOperationQueue *queue = [[NSOperationQueue alloc] init]; // 創(chuàng)建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]; // 執(zhí)行操作 [queue addOperation:a]; [queue addOperation:b]; [queue addOperation:c];

A,B,C是異步執(zhí)行的任務(wù),eg.網(wǎng)絡(luò)請求

Dispatch Group 會在整個組的任務(wù)都完成時通知你。這些任務(wù)可以是同
步的,也可以是異步的,即便在不同的隊列也行。
`
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);
        }
    });
});

`

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • NSThread 第一種:通過NSThread的對象方法 NSThread *thread = [[NSThrea...
    攻城獅GG閱讀 830評論 0 3
  • 在這篇文章中,我將為你整理一下 iOS 開發(fā)中幾種多線程方案,以及其使用方法和注意事項。當然也會給出幾種多線程的案...
    張戰(zhàn)威ican閱讀 612評論 0 0
  • 概述 這篇文章中,我不會說多線程是什么、線程和進程的區(qū)別、多線程有什么用,當然我也不會說什么是串行、什么是并行等問...
    hashakey閱讀 310評論 0 0
  • 首先明確線程和進程的關(guān)系和區(qū)別: 一個程序至少有一個進程,一個進程至少有一個線程. 線程的劃分尺度小于進程,使得多...
    kkj1996閱讀 212評論 0 0
  • 我親戚叫我和他開一個小型的涂料廠,生產(chǎn)涂料,就是刮完膩子以后再刷一層那種漆,他是搞技術(shù)出身的,沒有銷售經(jīng)驗,我也沒...
    六爺有話說閱讀 251評論 0 0