GCD使用(五)分组操作(group)

本文介绍如何使用Grand Central Dispatch (GCD) 的分组功能来管理并行任务,确保所有子任务完成后执行特定操作。通过两个示例展示了如何创建任务组、执行异步任务并在所有任务完成后接收通知。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1。监听一组任务是否完成,完成后得到通知,执行其他的操作
     dispatch_group_create :创建

     dispatch_group_async  /  dispatch_group_async_f :分组操作 (组里的任务是一个接一个的操作)

     dispatch_group_notify (group , queue ,  block) :在组里的操作都结束时,接收通知

e.g.

 1.dispatch_group_async

    dispatch_group_t  taskGroup =  dispatch_group_create();

    dispatch_queue_t  mainQueue =  dispatch_get_main_queue();

    

    //因为这里是更新界面,所以是在主线程 

    dispatch_group_async(taskGroup, mainQueue, ^{

        [self reloadTableView];

    });

    dispatch_group_async(taskGroup, mainQueue, ^{

        [self reloadScrollView];

    });

    dispatch_group_async(taskGroup, mainQueue, ^{

        [self reloadImageView];

    });

    

    /* At the end when we are done, dispatch the following block */

    dispatch_group_notify(taskGroup, mainQueue, ^{

        /* Do some processing here */

        [[[UIAlertView alloc] initWithTitle:@"Finished"

                                    message:@"All tasks are finished"

                                   delegate:nil

                          cancelButtonTitle:@"OK"

                          otherButtonTitles:nil, nil] show];

        

    }); 

e.g. 

   2.C函数:dispatch_group_async_f

void reloadAllComponents(void *context){  

    AppDelegate *self = (__bridge AppDelegate *)context;   

    [self reloadTableView];

    [self reloadScrollView];

    [self reloadImageView];   

}

- (void) actionGroup:(NSDictionary *)launchOptions{  

    dispatch_group_t taskGroup =  dispatch_group_create();

    dispatch_queue_t mainQueue =  dispatch_get_main_queue();  

    dispatch_group_async_f(taskGroup,

                           mainQueue,

                           (__bridge void *)self,  //C函数中的参数

                           reloadAllComponents);


    dispatch_group_notify(taskGroup, mainQueue, ^{

        [[[UIAlertView alloc] initWithTitle:@"Finished"

                                    message:@"All tasks are finished"

                                   delegate:nil

                          cancelButtonTitle:@"OK"

                          otherButtonTitles:nil, nil] show];

        

    });

   

 postscript: 

    宏

    NSLog(@"1-%s", __FUNCTION__); //当前函数签名

    NSLog(@"2-%d",__LINE__); //在源代码文件中当前所在行数

    NSLog(@"3-%s",__FILE__); //当前源代码文件全路径

    关键字

    __bridge : 在Core Foundation和ARC之间,做类型转换时用到


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值