//1、创建主线程(串行)

    dispatch_async(dispatch_get_main_queue(), ^{

        //刷新界面代码

    });

    //2、创建异步线程(并行)

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        //比较耗时的代码放这里

    });

    

    //3、gcd延迟

    double delayInSeconds = 1.0;

    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);

    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

        //延迟代码

    });

    

    //4、gcd只执行一次

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        //只执行一次代码

    });

    

    //5、有三个任务,需要异步并发执行前两个任务,前两个任务执行完成后再执行第三个任务。

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        

        //创建组

        dispatch_group_t group=dispatch_group_create();

        

        // 关联一个任务到group

        dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

            //任务一

            NSLog(@"******执行任务一******");

        });

        

        // 关联一个任务到group

        dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

            //任务二

            NSLog(@"******执行任务二******");

        });

        

        // 等待组中的任务执行完毕,回到主线程执行block回调

        dispatch_group_notify(group, dispatch_get_main_queue(), ^{

            //任务三

            NSLog(@"******等待组中的任务执行完毕,回到主线程执行block回调,执行任务三******");

        });

        

    });

    

 

    

    //6、dispatch_barrier_async的使用,dispatch_barrier_async是在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行

    dispatch_queue_t queue = dispatch_queue_create("create_asy_queue", DISPATCH_QUEUE_CONCURRENT);

    dispatch_async(queue, ^{

        NSLog(@"dispatch_async1");

    });

    dispatch_async(queue, ^{

        NSLog(@"dispatch_async2");

    });

    dispatch_barrier_async(queue, ^{

        NSLog(@"dispatch_barrier_async");

        dispatch_async(dispatch_get_main_queue(), ^{

            NSLog(@"刷新界面");

        });

        

    });

    dispatch_async(queue, ^{

        [NSThread sleepForTimeInterval:1];

        NSLog(@"dispatch_async3");

    });

    

    /*7、GCD的另一个用处是可以让程序在后台较长久的运行。

    在没有使用GCD时,当app被按home键退出后,app仅有最多5秒钟的时候做一些保存或清理资源的工作。但是在使用GCD后,app最多有10分钟的时间在后台长久运行。这个时间可以用来做清理本地缓存,发送统计数据等工作。

    让程序在后台长久运行的示例代码如下:

    */

    // AppDelegate.h文件

    @property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundUpdateTask;

    

    // AppDelegate.m文件

    - (void)applicationDidEnterBackground:(UIApplication *)application

    {

        [self beingBackgroundUpdateTask];

        // 在这里加上你需要长久运行的代码

        [self endBackgroundUpdateTask];

    }

    

    - (void)beingBackgroundUpdateTask

    {

        self.backgroundUpdateTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{

            [self endBackgroundUpdateTask];

        }];

    }

    

    - (void)endBackgroundUpdateTask

    {

        [[UIApplication sharedApplication] endBackgroundTask: self.backgroundUpdateTask];

        self.backgroundUpdateTask = UIBackgroundTaskInvalid;

    }

GCD一些常用的方法的更多相关文章

  1. WebAPi添加常用扩展方法及思维发散

    前言 在WebAPi中我们通常需要得到请求信息中的查询字符串或者请求头中数据再或者是Cookie中的数据,如果需要大量获取,此时我们应该想到封装一个扩展类来添加扩展方法,从而实现简便快捷的获取. We ...

  2. StringUtils中的常用的方法

    org.apache.commons.lang.StringUtils中常用的方法,这里主要列举String中没有,且比较有用的方法: 1. 检查字符串是否为空: static boolean isB ...

  3. JOptionPane类提示框的一些常用的方法

    JOptionPane类提示框的一些常用的方法 XMLOracleSwing 最近在做swing程序中遇到使用消息提示框的,JOptionPane类其中封装了很多的方法. 很方便的,于是就简单的整理了 ...

  4. 常用js方法

    function dateGetter(name, size, offset, trim) { offset = offset || 0; return function (date) { var v ...

  5. jQuery操作Table tr td常用的方法

    虽然现在DIV+CSS进行页的布局大行其道,但是很多地方使用table还是有很多优势,用table展示数据是比较方便的,下面汇总了jQuery操作Table tr td常用的方法,熟记这些操作技巧,下 ...

  6. iOS常用公共方法

      iOS常用公共方法 字数2917 阅读3070 评论45 喜欢236 1. 获取磁盘总空间大小 //磁盘总空间 + (CGFloat)diskOfAllSizeMBytes{ CGFloat si ...

  7. org.apache.commons.lang.StringUtils中常用的方法

    org.apache.commons.lang.StringUtils中常用的方法,这里主要列举String中没有,且比较有用的方法: 1. 检查字符串是否为空: static boolean isB ...

  8. 常用js方法整理common.js

    项目中常用js方法整理成了common.js var h = {}; h.get = function (url, data, ok, error) { $.ajax({ url: url, data ...

  9. Java获取各种常用时间方法大全

    Java获取各种常用时间方法大全 package cc.javaweb.test; Java中文网,Java获取各种时间大全 import java.text.DateFormat; import j ...

随机推荐

  1. iOS项目的本地化处理(多国语言)

    项目的本地化就是:iOS系统在不同语言环境下自动切换语言,从而实现一个app发布到全世界各个国家的AppStore上. 我们不仅仅需要在iOS项目中做本地化处理,在上架iOS APP的时候,也需要做对 ...

  2. ife任务刷题总结(一)-css reset与清除浮动

    本文同时发布于本人的个人网站www.yaoxiaowen.com 百度创办的前端技术学院,是一个面向大学生的前端技术学习平台.虽然只有大学生才有资格报名,提交代码进行比赛排名.但是这并不妨碍我们这些初 ...

  3. QuicKHit

    public class Level { private int levelNo;// 各级别编号 private int strLength;// 各级别一次输出字符串的长度 private int ...

  4. iOS:个人浅谈工厂模式

    一.什么是工厂方法? 正式的解释是:在基类中定义创建对象的一个接口,让子类决定实例化哪个类.工厂方法让一个类的实例化延迟到子类中进行.工厂方法要解决的问题是对象的创建时机,它提供了一种扩展的策略,很好 ...

  5. c# unchecked关键字。byte 合并short

    参考MSDN 代码: public class BytesOperate { /// <summary> /// 计算校验和,SUM /// </summary> public ...

  6. 使用命令行 Subversion 访问项目源文件(SVN)

    from:http://www.open.collab.net/scdocs/ddUsingSVN_command-line.html.zh-cn 命令行 Subversion 入门 如果您参与的项目 ...

  7. SVN File Name Case Sensitivity--SVN大小写问题

    from:http://www.visualsvn.com/support/topic/00019/ Windows has a case-insensitive file system. Unix ...

  8. VSS转SVN

    我们都知道VSS和SVN都是源代码的版本控制软件:最近公司准备把多年使用的VSS代码全部转到SVN中进行管理,查询了一些资料,整理一下,分享给大家 基本分三大步进行,如下: 1.去掉VSS所有绑定 2 ...

  9. ZOJ 2412 Farm Irrigation

    Farm Irrigation Time Limit: 2 Seconds      Memory Limit: 65536 KB Benny has a spacious farm land to ...

  10. Slackware Linux or FreeBSD 配置中文环境。

    配置中文环境. Slackware Linux 如果在控制面板的语言与地区选项中没有找到中文,那说明在安装系统选择软件的时候没有将国际语言支持包选上,可以从slackware的安装盘或ISO文件中提取 ...