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

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

  • 相关阅读:
    GNU make manual 翻译(九十九)
    GNU make manual 翻译( 九十五)
    Shell的 for 循环小例子
    makefile中对目录遍历的小例子
    GNU make manual 翻译(九十三)
    GNU make manual 翻译( 一百)
    GNU make manual 翻译( 九十七)
    GNU make manual 翻译( 九十八)
    mapserver4.8.3 的readme.win32的中文翻译文件
    遥控器编程
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3074786.html
Copyright © 2011-2022 走看看