IOS开发(65)之GCD任务分组

1 前言

使用 dispatch_group_create 函数在 GCD 上创建一个组。 用于处理彼此之间的依赖关系,将代码块分组来确保它们被 GCD 逐个执行。

GCD 中使用组的时候你应该知道 4 个函数:

dispatch_group_create
创建一个组句柄。一旦你使用完了这个组句柄,应该使用 dispatch_release 函数将其释放。 

dispatch_group_async 在一个组内提交一个代码块来执行。必须明确这个代码块属于哪个组,必须在哪个派送队列上执行。 

dispatch_group_notify

允许你提交一个 Block Object。一旦添加到这个组的任务完成执行之后,这个 Block Object 应该被执行。

这个函数也允许你明确执行 Block Object 的分派队列。

 dispatch_release

这个函数释放那任何一个你通过 dispatch_group_create 函数创建的分派小组。

2 代码实例

ZYAppDelegate.m
- (void) reloadTableView{
    //__FUNCTION__ 方法会输出 [类 方法名] 的格式内容;
    NSLog(@"%s", __FUNCTION__);
}
- (void) reloadScrollView{
    NSLog(@"%s", __FUNCTION__);
}
- (void) reloadImageView{
    NSLog(@"%s", __FUNCTION__);
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //创建队列组
    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]; });
    /*以上队列结束后继续在主队列上调用下面的Block方法*/
    dispatch_group_notify(taskGroup, mainQueue, ^{
    [[[UIAlertView alloc] initWithTitle:@"Finished"
                          message:@"All tasks are finished" delegate:nil
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil, nil] show];
    });
    //释放队列组
    dispatch_release(taskGroup);
    
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.viewController = [[ZYViewController alloc] initWithNibName:@"ZYViewController" bundle:nil];
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}
运行结果(按顺序)
控制台显示结果

2013-05-12 11:13:54.886 GCDGroupTest[684:c07] -[ZYAppDelegate reloadTableView]

2013-05-12 11:13:54.888 GCDGroupTest[684:c07] -[ZYAppDelegate reloadScrollView]

2013-05-12 11:13:54.889 GCDGroupTest[684:c07] -[ZYAppDelegate reloadImageView]

运行后结果


3 结语

以上是所有内容,希望对大家有所帮助。

Demo代码实例:http://download.csdn.net/detail/u010013695/5360287

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值