iOS 多个网络请求并行完成后执行某一操作

1: dispatch_semaphore_create(value: Int) ->dispatch_semaphore_t!

    该函数使用一个初始值创建一个dispatch_semaphore_t类型的信号量,注意:这里的传入的参数value必须大于或等于0,否则dispatch_semaphore_create会返回NULL

2:dispatch_semaphore_wait(dsema: dispatch_semaphore_t,_ timeout:dispatch_time_t) ->Int

     等待信号量,该函数会使传入的信号量dsema的值减1

3:dispatch_semaphore_signal(dsema: dispatch_semaphore_t) ->Int

     发送一个信号,这个函数会使传入的信号量dsema的值加1

    当返回值为0时表示当前并没有线程等待其处理的信号量,其处理的信号量的值加1即可。当返回值不为0时,表示其当前有(一个或多个)线程等待其处理的信号量,并且该函数唤醒了一个等待的线程(当线程有优先级时,唤醒优先级最高的线程;否则随机唤醒.

函数的作用:如果dsema信号量的值大于0,该函数所处线程就继续执行下面的语句,并且将信号量的值减1;如果desema的值为0,那么这个函数就阻塞当前线程等待timeout

dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group, queue, ^{

      NSLog(@"处理事件1");
      dispatch_semaphore_signal(semaphore);
});
dispatch_group_async(group, queue, ^{
        NSLog(@"处理事件2");
        dispatch_semaphore_signal(semaphore);
});
dispatch_group_notify(group, queue, ^{
        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
        NSLog(@"end");
});

你可能感兴趣的:(iOS开发)