dispatch

    xiaoxiao2021-03-25  161

    dispatch_group的使用:把一组任务提交到队列中,这些队列可以不相关,然后实现这组任务的事件。 dispatch_group_create() 创建group; dispatch_group_async 把一个任务异步添加到group中; dispatch_group_wait 等待group执行的时间; dispatch_group_notify 监听group事件的执行完毕; dispatch_group_enter()指明一个任务执行块进入了一个group; dispatch_group_leave()表明执行块执行完毕,移除出group; dispatch_group_enter && dispatch_group_leave必须成对出现;

    //获得全局队列 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); //创建group dispatch_group_t group = dispatch_group_create(); //异步添加任务A dispatch_group_async(group, queue, ^{ for (int i = 0; i < 2; i++) { NSLog(@"AAAA------%d",i); } }); //异步添加任务B dispatch_group_async(group, queue, ^{ for (int i = 0; i < 2; i++) { NSLog(@"BBBB------%d",i); } }); //异步添加任务C dispatch_group_async(group, queue, ^{ for (int i = 0; i < 2; i++) { NSLog(@"CCCC------%d",i); } }); //监听group事件的执行完毕 dispatch_group_notify(group, queue, ^{ NSLog(@"Group 执行完成"); }); dispatch_async(queue, ^{ NSLog(@"----Test"); //执行group的时间超过10s后,便执行下方代码,若提前完成,则直接执行 //dispatch_group_wait是同步的,不能放在主线程 dispatch_group_wait(group, dispatch_time(DISPATCH_TIME_NOW, 10 * NSEC_PER_SEC)); NSLog(@"-----End"); });

    打印结果:

    对于同步任务,dispatch_group_enter && dispatch_group_leave组合起来相当于dispacth_group_async(),对于异步任务用dispacth_group_async()会出现问题,例如:

    dispatch_group_async(group, queue, ^{ self.testDo.doSomething = ^(){ //do something }; });
    转载请注明原文地址: https://ju.6miu.com/read-4444.html

    最新回复(0)