iOS 等待for循环里的block返回异步任务完成再进行其他操作

  // 1.创建一个串行队列,保证for循环依次执行
    dispatch_queue_t serialQueue = dispatch_queue_create("serialQueue", DISPATCH_QUEUE_SERIAL);
    // 2.异步执行任务
    dispatch_async(serialQueue, ^{
        // 3.创建一个数目为1的信号量,用于“卡”for循环,等上次循环结束在执行下一次的for循环
        dispatch_semaphore_t sema = dispatch_semaphore_create(1);
        
        NSArray *arr = @[@"7923605",@"7923205",@"7727742"];
        for (int i = 0; i < arr.count; i ++ ) {
            // 开始执行for循环,让信号量-1,这样下次操作须等信号量>=0才会继续,否则下次操作将永久停止
            dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
            NSString *str = [arr objectAtIndex:i];
            NSLog(@"str == %@",str);
            
            [DoorDuDataManager getUserKeyListWithRoomId:str completion:^(DoorDuKeyList *keyList, DoorDuError *error) {
                if (!error) {
                    NSLog(@"xxxxx == %@",keyList.list);
                     // 本次for循环的异步任务执行完毕,这时候要发一个信号,若不发,下次操作将永远不会触发
                    dispatch_semaphore_signal(sema);
                }
            }];
            
        }

    });
    
    NSLog(@"所有操作完成后的操作--->");


本文参考:https://blog.csdn.net/qq_34417314/article/details/80449484

你可能感兴趣的:(iOS 等待for循环里的block返回异步任务完成再进行其他操作)