1.GCD应用 单例模式
   
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
   
        NSLog(@"执行一次%@",[NSThread currentThread]);
       

});

2.延迟操作
    //1、
    NSLog(@"开始执行");
   
    //    [self performSelector:@selector(handleAction) withObject:nil afterDelay:0];
   
    //2、
   
    //DISPATCH_TIME_NOW 从现在开始
    //delayInSeconds 延迟几秒
   
    dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC));
   
    //    when dispatch_time_t
   
    dispatch_after(time, dispatch_get_main_queue(), ^{
       
        NSLog(@"%@",[NSThread currentThread]);
       
    });

3.调度组

//创建调度组
    dispatch_group_t group = dispatch_group_create();
    //获取全局队列
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    //调度组的异步请求
    dispatch_group_async(group, queue, ^{
       
        [NSThread sleepForTimeInterval:2];
        NSLog(@"下载第一张图");
    });
    dispatch_group_async(group, queue, ^{
        [NSThread sleepForTimeInterval:3];
       
        NSLog(@"下载第二张图");
    });
    dispatch_group_async(group, queue, ^{
        [NSThread sleepForTimeInterval:1];
       
        NSLog(@"下载第三张图");
    });
    dispatch_group_async(group, queue, ^{
        [NSThread sleepForTimeInterval:5];
       
        NSLog(@"下载第四张图");
    });
    //notify通知,当所有异步请求完成时调用dispatch_group_notify
    dispatch_group_notify(group, queue, ^{
        NSLog(@"更新UI");
    });

4.调度组的第二种方式

//创建调度组
    dispatch_group_t group = dispatch_group_create();
    //获取全局队列
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
   
    //进入队列
    dispatch_group_enter(group);
    dispatch_async(queue, ^{
       
        [NSThread sleepForTimeInterval:2];
        NSLog(@"下载第一张图");
       
        //离开队列
        dispatch_group_leave(group);
    });
   
    dispatch_group_enter(group);
    dispatch_async(queue, ^{
       
        [NSThread sleepForTimeInterval:1];
        NSLog(@"下载第er张图");
       
        dispatch_group_leave(group);
    });
   
    dispatch_group_enter(group);
    dispatch_async(queue, ^{
       
        [NSThread sleepForTimeInterval:3];
        NSLog(@"下载第san张图");
       
        dispatch_group_leave(group);
    });
   
    //等待调度队列wait相当于一个阻塞状态 等最后一个异步进程执行后,更新UI才执行
    dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
   
    NSLog(@"更新UI");

5.中断操作

//dispatch_barrier_async一定是自定义队列
    //这里指定的并发队列应该是自己通过dispatch_queue_create函数创建的。如果你传的是一个串行队列或者全局并发队列,这个函数等同于dispatch_async函数。
   
    dispatch_queue_t queue = dispatch_queue_create("com.blogcn", DISPATCH_QUEUE_CONCURRENT); //dispatch_get_global_queue(0, 0);
   
    dispatch_async(queue, ^{
        [NSThread sleepForTimeInterval:1];
        NSLog(@"1");
    });
   
    dispatch_async(queue, ^{
        [NSThread sleepForTimeInterval:3];
       
        NSLog(@"2");
    });
    dispatch_async(queue, ^{
       
        [NSThread sleepForTimeInterval:2];
       
        NSLog(@"3");
    });
   
    //中断操作dispatch_barrier_async
    dispatch_barrier_async(queue, ^{
        NSLog(@"--------");
        [NSThread sleepForTimeInterval:1];
       
    });
   
    dispatch_async(queue, ^{
       
        [NSThread sleepForTimeInterval:1];
        NSLog(@"4");
    });
    dispatch_async(queue, ^{
        NSLog(@"5");
    });

6.遍历

//遍历操作
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    //iterations 遍历的次数
    dispatch_apply(5, queue, ^(size_t i) {
        NSLog(@"%@",@(i));
    });

GCD应用及其他方法的更多相关文章

  1. GCD的简单使用方法

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/like7xiaoben/article/details/25629365 /* 创建一个队列用来运行 ...

  2. iOS 线程之GCD的高级使用方法

    之前的一篇关于线程的blog已经为大家介绍了GCD的简单使用方式及样例说明,今天因为项目中有特殊的应用GCD的实例,为大家介绍两种特殊需求的使用GCD的方法. 目的:实现一件事情做完,再做下一件事情. ...

  3. Swift中的GCD——常见的dispatch方法

    什么是GCD Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法.该方法在Mac OS X 10.6雪豹中首次推出,并随后被引入到了iOS4.0中.GCD ...

  4. GCD一些常用的方法

        //1.创建主线程(串行)     dispatch_async(dispatch_get_main_queue(), ^{         //刷新界面代码     });     //2. ...

  5. [New learn]GCD其他方法的使用

    https://github.com/xufeng79x/GCDDemo 1.简介 在前面的两篇博文中我介绍了GCD的一般使用方法和死锁的分析调查.本博文中继续讲解GCD的其他比较常用的几个使用方法. ...

  6. 浅谈iOS开发中方法延迟执行的几种方式

    Method1. performSelector方法 Method2. NSTimer定时器 Method3. NSThread线程的sleep Method4. GCD 公用延迟执行方法 - (vo ...

  7. GCD、dispatch函数介绍

    iOS多线程的方法有3种: NSThread NSOperation GCD(Grand Central Dispatch) 其中,由苹果所倡导的为多核的并行运算提出的解决方案:GCD能够访问线程池, ...

  8. App开发流程之使用GCD

    GCD即为Grand Central Dispatch的缩写,是一种主要用于异步处理任务的安全的高性能解决方案. 在此不对比其他异步处理技术,只记录GCD的使用及说明. 先记录一些必要的概念:线程,同 ...

  9. iOS学习之GCD

    多线程编程 线程定义:一个CPU执行的CPU命令 列一条无分叉的路径就叫线程. 多线程:执行多个不同的CPU命令 有多条路径. 线程的使用:主线程(又叫作UI线程)主要任务是处理UI事件,显示和刷新U ...

随机推荐

  1. 浏览器桌面通知Notification探究

    首先说明,这篇博文不是科普讲解的,而是立flag研究的,是关于浏览器消息自动推送,就是下面这个玩意: 最近常常在浏览器看到这样的消息推送,还有QQ.com的推送,现在我对这个不了解,不知道叫消息自动推 ...

  2. Centos6.5 python升级成2.7版本出现的一些问题解决方法

    由于功能及程序依赖,需要将Centos上的python从2.6升级成2.7,把碰到的一些问题记录如下: 安装好2.7后将原来的/usr/bin/python改成/usr/bin/python26,并将 ...

  3. JAVA - JAVA编译运行过程

    Java编译原理 *.java→*.class→机器码 java编译器 (编译) → 虚拟机(解释执行) →  解释器(翻译) → 机器码 1.Java编译过程与c/c++编译过程不同 Java编译程 ...

  4. .NET Nancy 详解(三) Respone 和 ViewEngine

    我们在ASP.NET MVC中可以返回各种类型的ActionResult(以下图片来自于园友--待补..) 在Nancy 中本着简单粗暴的原则,使用方式略有不同.这期我们使用的版本是Nancy的第一个 ...

  5. 对于 ThreadLocal 的理解和应用

    首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的.各 ...

  6. 基于MVC4+EasyUI的Web开发框架经验总结(11)--使用Bundles处理简化页面代码

    在Web开发的时候,我们很多时候,需要引用很多CSS文件.JS文件,随着使用更多的插件或者独立样式文件,可能我们的Web界面代码会越来越臃肿,看起来也很累赘,在MVC里面提供了一个Bundle的对象, ...

  7. 介绍开源的.net通信框架NetworkComms框架 源码分析(二十 )ConnectionCreate

    原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  以前是收费的 目前作者已经开源  许可是 ...

  8. 基于.Net Framework 4.0 Web API开发(4):ASP.NET Web APIs 基于令牌TOKEN验证的实现

    概述:  ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题, ...

  9. 清除Windows的DNS缓存

    最近ESET杀毒软件老是提示受到DNS缓存攻击,然后就不能打开网页,或者打开得很慢.这是由于缓存的DNS被更改,访问的是错误的IP地址造成的. 解决的办法就是清除DNS缓存,打开DOS命令窗口,先后输 ...

  10. [javaSE] 反射-Class类的基本操作

    获取类的名称 获取该类的方法 获取方法的返回值类型 获取方法的名称 获取方法的参数的类型 package com.tsh.reflect; import java.lang.reflect.Metho ...