//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. Linux小技巧1:如何关闭Root用户SSH登陆

    新建用户 >useradd nonroot //新建用户 >passwd nonroot //创建/修改nonroot用户密码 >vim /etc/ssh/sshd_config 将 ...

  2. ios程序发布测试打包

    1. 获取测试机UDID 手机连接电脑,打开iTunes-摘要-点击序列号,设备概要界面显示设备udid-反键-拷贝 2. 添加设备 取得UDID后,进入开发者中心-iOS PRovisioning ...

  3. golang: 常用数据类型底层结构分析

    虽然golang是用C实现的,并且被称为下一代的C语言,但是golang跟C的差别还是很大的.它定义了一套很丰富的数据类型及数据结构,这些类型和结构或者是直接映射为C的数据类型,或者是用C struc ...

  4. MFC操作excel

    环境:VS2013+office2007 头文件: #pragma once #ifndef __MYEXCEL_H_ #define __MYEXCEL_H_ #include "CApp ...

  5. LeetCode Moving Average from Data Stream

    原题链接在这里:https://leetcode.com/problems/moving-average-from-data-stream/ 题目: Given a stream of integer ...

  6. linux命令日常总结

    1.date 显示系统日期2. mkdir xx 创建xx目录 rmdir xx 删除xx目录(空目录) rm -rf xx 删除xx目录(非空目录) 3. vi xx 创建某文件 写入-->e ...

  7. RabbitMQ学习之集群部署

    我们先搭建一个普通集群模式,在这个模式基础上再配置镜像模式实现高可用,Rabbit集群前增加一个反向代理,生产者.消费者通过反向代理访问RabbitMQ集群. 架构图如下: 设计架构可以如下:在一个集 ...

  8. HTML5 video标签播放视频下载原理

    HTML5 video https://github.com/remy/html5demos/blob/master/demos/video.html <video preload=" ...

  9. 用Canvas制作剪纸效果

    在做剪纸效果之前,先介绍剪纸效果运用到的一些知识: 1.阴影: 在Canvas之中进行绘制时,可以通过修改绘图环境中的如下4个属性值来指定阴影效果: shadowColor:CSS格式的颜色字串.默认 ...

  10. >>> 主页推荐链接

    Apple专区 App Store 排行榜 App Store 排行榜 - 中国区 PC6苹果网 威锋网 第三方 环信 - 即时通讯云领导者 腾讯Bugly - Android Crash | iOS ...