zoukankan      html  css  js  c++  java
  • 函数执行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

    文章结束给大家分享下程序员的一些笑话语录: 刹车失灵
    有一个物理学家,工程师和一个程序员驾驶着一辆汽车行驶在阿尔卑斯山脉 上,在下山的时候,忽然,汽车的刹车失灵了,汽车无法控制地向下冲去, 眼看前面就是一个悬崖峭壁,但是很幸运的是在这个悬崖的前面有一些小树 让他们的汽车停了下来, 而没有掉下山去。 三个惊魂未定地从车里爬了出来。
    物理学家说, “我觉得我们应该建立一个模型来模拟在下山过程中刹车片在高 温情况下失灵的情形”。
    工程师说, “我在车的后备厢来有个扳手, 要不我们把车拆开看看到底是什么 原因”。
    程序员说,“为什么我们不找个相同的车再来一次以重现这个问题呢?”

  • 相关阅读:
    日期多选插件Kalendae.js
    解决iReport打不开的一种方法
    Hibernate不能建表的问题
    【JAVA】虚拟机指令集
    解决jquery操作checkbox火狐下第二次无法勾选问题
    关于Java异常一段很有意思的代码
    C#中Winform程序中如何实现多维表头【不通过第三方报表程序】
    【转】C#中WinForm程序退出方法技巧总结
    为CentOS安装yum源
    Rsync CentOS 7 下安装
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3074786.html
Copyright © 2011-2022 走看看