1.一次性代码:dispatch_once

有时候,有些代码在程序中只要被执行一次。

整个程序运行过程中,只会执行一次。

- (void)viewDidLoad
{
[super viewDidLoad]; static dispatch_once_t onceToken ;
dispatch_once(&onceToken, ^{
NSLog(@"代码只执行一次");
});
}

2.延时执行

延时执行通常有两种方法:

(1)普通用法

   [self performSelector:@selector(run) withObject:nil afterDelay:2.0];

(2)GCD用法

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//两秒后执行的代码
NSLog(@"ahah");
});

如果队列是主队列,就在主队列中执行。如果队列是并发队列,就会开启新的线程。

    //全局并发队列
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ); dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), queue, ^{
//两秒后执行的代码
NSLog(@"ahah");
});

2017-06-17 10:32:09.483 GCDTest[15536:2440067] 代码只执行一次

2017-06-17 10:32:11.683 GCDTest[15536:2440162] ahah --- <NSThread: 0x608000063300>{number = 3, name = (null)}

3.队列组

创建一个队列组—>

开启多个任务(将所有任务放到队列组里面,同时执行)—>

等队列组里面的所有任务都执行完成,再回到主线程执行其他操作

- (void)viewDidLoad
{
[super viewDidLoad]; //1.创建一个队列组
dispatch_group_t group = dispatch_group_create(); //全局并发队列
dispatch_queue_t global_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ); //开启一个任务,放到队列组中,异步执行
dispatch_group_async(group, global_queue, ^{ NSLog(@"小红吃饭------%@",[NSThread currentThread]); }); //再开启一个任务
dispatch_group_async(group, global_queue, ^{
NSLog(@"小明吃饭------%@",[NSThread currentThread]);
}); //两个任务执行完,再执行这个
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"吃完一起回家------%@",[NSThread currentThread]);
}); }

iOS---GCD的三种常见用法的更多相关文章

  1. Spring源码分析之IOC的三种常见用法及源码实现(二)

    Spring源码分析之IOC的三种常见用法及源码实现(二) 回顾上文 我们研究的是 AnnotationConfigApplicationContext annotationConfigApplica ...

  2. Spring源码分析之IOC的三种常见用法及源码实现(一)

    1.ioc核心功能bean的配置与获取api 有以下四种 (来自精通spring4.x的p175) 常用的是前三种 第一种方式 <?xml version="1.0" enc ...

  3. jdbc三种常见用法

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...

  4. Spring源码分析之IOC的三种常见用法及源码实现(三)

    上篇文章我们分析了AnnotationConfigApplicationContext的构造器里refresh方法里的invokeBeanFactoryPostProcessors,了解了@Compo ...

  5. 深入学习jQuery的三种常见动画效果

    × 目录 [1]显隐效果 [2]高度变化 [3]淡入淡出 前面的话 动画效果是jQuery吸引人的地方.通过jQuery的动画方法,能够轻松地为网页添加视觉效果,给用户一种全新的体验.jQuery动画 ...

  6. iOS GCD多线程介绍

    GCD:是纯C语言写的,是苹果公司为多核的并行运算提出的解决方案. GCD的两个核心概念: - 任务 - 队列 将任务添加到队列中 GCD会自动将队列中的任务取出,放到对应的线程中执行 任务的取出遵循 ...

  7. iOS GCD基础篇 - 同步、异步,并发、并行的理解

    1.关于GCD - GCD全称是Grand Central Dispatch  - GCD是苹果公司为多核的并行运算提出的解决方案  - GCD会自动利用更多的CPU内核(比如双核.四核)  - GC ...

  8. iBatis一些非见用法(相当实用)

     兼顾效率,iBatis一些非见用法(10条) 2009-09-18 10:33:03 标签:iBatis 休闲 职场 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声 ...

  9. Android应用开发中三种常见的图片压缩方法

    Android应用开发中三种常见的图片压缩方法,分别是:质量压缩法.比例压缩法(根据路径获取图片并压缩)和比例压缩法(根据Bitmap图片压缩). 一.质量压缩法 private Bitmap com ...

随机推荐

  1. DB2 autoincretment(抄袭)

    自动生成列: 1.在创建表的时候通过generated字句指定; 2.支持两个选项,generated always和generated by default.    1)generated alwa ...

  2. Java代码实现依赖注入

    http://zhangjunhd.blog.51cto.com/113473/126545 这里将模仿Spring实现一种基于xml配置文件的依赖注入机制.文件中将实现3中注入,一是单值注入,包括i ...

  3. Spring boot 注解简单备忘

    Spring boot 注解简单备忘 1.定义注解 package com.space.aspect.anno;import java.lang.annotation.*; /** * 定义系统日志注 ...

  4. Netty学习第六节实例一步学习

    NIO与传统IO对应使用的类: ServerSocketChannel相当于ServerSocket SocketChannel 相当于Socket Selector是NIO的核心类,是负责监听Ser ...

  5. About DNS

    FQDN -- Fully Qualified Domain Name TTL -- Time To Live TLD -- Top Level Domain gTLD -- Generic Top ...

  6. SSH整合 第四篇 Spring的IoC和AOP

    这篇主要是在整合Hibernate后,测试IoC和AOP的应用. 1.工程目录(SRC) 2.IoC 1).一个Service测试类 /* * 加入spring容器 */ private Applic ...

  7. hdu2602 Bone Collector(01背包) 2016-05-24 15:37 57人阅读 评论(0) 收藏

    Bone Collector Problem Description Many years ago , in Teddy's hometown there was a man who was call ...

  8. cordova使用webrtc与网页端及移动端视频、语音聊天

    最近在做一个移动端与移动端.网页端文字.视频.语音聊天的功能.文字聊天使用websocket,在网上很多资料,也没什么难度.但是在视频.语音聊天上遇到了小小的难点.之前一直在找一些SDK想快速开发,例 ...

  9. C# 如何防止重放攻击(转载)

    转载地址:http://www.cnblogs.com/similar/p/6776921.html 重放攻击 重放攻击是指黑客通过抓包的方式,得到客户端的请求数据及请求连接,重复的向服务器发送请求的 ...

  10. 在Sublime中集成Team Foundation Server (TFS),实现版本管理

    Sublime是一款具有代码高亮.语法提示.自动完成且反应快速的编辑器软件,由于它开发的技术架构.丰富的插件,和轻盈而快速的编程响应,Sublime广受程序员的爱好.在C, C++, Javascri ...