//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. 非常适用的Sourceinsight插件,提高效率事半功倍

    一直使用sourceinsight编辑C/C++代码,sourceinsight是一个非常好用的编辑工具可以任意定位,跳转,回退,本人一直 使用该工具做C/C++开发,sourceinsight能够满 ...

  2. WordPress基础:自定义菜单

    需要自定义一个菜单,可以访问后台->外观->菜单

  3. lodash 替换 underscore

    不少知名项目都在用lodash替换underscore lodash  Lazy evaluation 英文原文:http://filimanjaro.com/blog/2014/introducin ...

  4. c# json TO xml

    using System.IO;using System.Text;using System.Xml.Serialization;using System.Xml;using System.Runti ...

  5. Nginx 安装

    1 编译环境 yum -y groupinstall "Development Tools" "Server Platform Development"   2 ...

  6. SpringMVC原理解析-Servlet容器启动时初始化SpringMVC应用的原理

  7. app慢的可能情况需要优化

    网络请求超时的机制设置,发现如果设置3S太短,导致有一些服务不能成功请求到数据,每次都报超时.问题解决 1. 调大超时时间 2. 优化查询mysql http://blog.chinaunix.net ...

  8. C# (灰度)加权平均法将图片转换为灰度图

    private Bitmap ToG(string file) { using (Bitmap o = new Bitmap(file)) { Bitmap g = new Bitmap(o.Widt ...

  9. C# 利用ICSharpCode.SharpZipLib实现在线加密压缩和解密解压缩

    这里我们选用ICSharpCode.SharpZipLib这个类库来实现我们的需求. 下载地址:http://icsharpcode.github.io/SharpZipLib/ 1.单个或多个文件加 ...

  10. operator->和operator->*

    ->和->*都是C++中定义的可重载的运算符,其中:->称为成员选择符(member selection),而->*称为成员指针选择符(pointer-to-member se ...