var queue: dispatch_queue_t = dispatch_get_main_queue()// 主线程

queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0)// 后台执行

// 异步执行队列任务

dispatch_async(queue, { () -> Void in

print("开新线程执行")

})

// 延时执行

var delta:Int64 = Int64(2 * NSEC_PER_SEC)// 2s后执行,可能不仅限于2s

delta = Int64(100 * NSEC_PER_MSEC)//100毫秒后执行

// NSEC_PER_MSEC

let when: dispatch_time_t = dispatch_time(DISPATCH_TIME_NOW, delta)

dispatch_after(when, queue) { () -> Void in

print("dispatch_after")

}

// 只执行一次

struct Static {

static var onceToken: dispatch_once_t = 0

static var value: String!

}

dispatch_once(&Static.onceToken, { () -> Void in

Static.value = "单例模式"

})

print("\(Static.value)")

dispatch_once(&Static.onceToken, { () -> Void in

Static.value = "改变值"

})

print("\(Static.value)")

// 分组执行

let group = dispatch_group_create()

queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)// 默认优先级执行

for (var i = 0; i<10; i++) {

//异步执行队列任务

dispatch_group_async(group, queue, { () -> Void in

Static.value = Static.value + "1"

print("\(Static.value)")

})

}

// 分组队列执行完毕后执行

dispatch_group_notify(group, queue) { () -> Void in

print("dispatch_group_notify")

}

// 串行队列:只有一个线程,加入到队列中的操作按添加顺序依次执行。

let serialQueue = dispatch_queue_create("yangj", DISPATCH_QUEUE_SERIAL)

for (var i = 0; i<10; i++) {

//异步执行队列任务

dispatch_async(serialQueue, { () -> Void in

//Static.value = Static.value + "1"

//println("\(Static.value)")

})

}

// 并发队列:有多个线程,操作进来之后它会将这些队列安排在可用的处理器上,同时保证先进来的任务优先处理。

let globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)

for (var i = 0; i<10; i++) {

//异步执行队列任务

dispatch_async(globalQueue, { () -> Void in

//Static.value = Static.value + "1"

//println("\(Static.value)")

})

}

}

Swift GCD的更多相关文章

  1. swift GCD使用指南

    swift GCD使用指南 Grand Central Dispatch(GCD)是异步执行任务的技术之一.一般将应用程序中记述的线程管理用的代码在系统级中实现.开发者只需要定义想执行的任务并追加到适 ...

  2. Swift GCD的使用1

    typealias Task = (cancel : Bool) -> () func delay(time : NSTimeInterval, task : () -> ()) -> ...

  3. swift版的GCD封装

    swift版的GCD封装 说明 本人针对swift封装了GCD,包括GCDQueue,GCDGroup,GCDTimer以及GCDSemaphore,使用较为便利. 源码 https://github ...

  4. Awesome Swift

    Awesome Swift https://github.com/matteocrippa/awesome-swift A collaborative list of awesome Swift re ...

  5. iOS学习路线图

    一.iOS学习路线图   二.iOS学习路线图--视频篇       阶 段 学完后目标 知识点 配套学习资源(笔记+源码+PPT) 密码 基础阶段 学习周期:24天       学习后目标:    ...

  6. iOS自定义弹出视图、收音机APP、图片涂鸦、加载刷新、文件缓存等源码

    iOS精选源码 一款优秀的 聆听夜空FM 源码 zhPopupController 简单快捷弹出自定义视图 WHStoryMaker搭建美图(贴纸,涂鸦,文字,滤镜) iOS cell高度自适应 有加 ...

  7. 【swift】BlockOperation和GCD实用代码块

    //BlockOperation // // ViewController.swift import UIKit class ViewController: UIViewController { @I ...

  8. swift 多线程及GCD

    1.基本概念 1)进程: 进程是指在系统中正在运行的一个应用程序.每个进程之间是独立的,每个进程运行在其专用且受保护的内存空间里.某进程内的线程在其它进程不可见 2)线程: 1个进程要执行任务,必须有 ...

  9. Swift - 多线程实现方式(3) - Grand Central Dispatch(GCD)

    1,Swift继续使用Object-C原有的一套线程,包括三种多线程编程技术: (1)NSThread (2)Cocoa NSOperation(NSOperation和NSOperationQueu ...

随机推荐

  1. Ubuntu 使用root登陆界面

    打开终端开启root账户 :sudo passwd -u root 输入当前用户的密码 2.为root账户设置密码:sudo passwd root 设置root密码,输入两次 3.进入到/usr/s ...

  2. 批处理命令 For循环命令详解!

    批处理for命令详解FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能!看看他的基本格式(这里我引用的是批处理中的格式,直接在命令行只需要一个%号)FOR 参数 %%变量名 IN (相关文 ...

  3. SaltStack日常维护-第七篇

    练习内容 远程执行其他模块 官方模块有很多超过300+ 1.cmd.run 2.network 3.service 4.state 5.其它日常维护 演示 cmd.run模块 可以执行系统命令,超级模 ...

  4. MySQL MERGE存储引擎 简介及用法

    MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询.构成一个MERGE数据表结构的各成员MyISAM数据表必须具有完全一样的结构.每一个成员数据表的数据列必 ...

  5. Windows下安装mayavi2

    由于要使用mayavi2画三维图,但是没有找到二进制包,所以只能安装pythonxy或者canopy之类的版本,后来在http://www.lfd.uci.edu/~gohlke/pythonlibs ...

  6. list<>泛型的意义

    泛型就是指定一个自定类或数据类型例如(int)并命名一个XXX集合名,所有这个类型的数据可以加入这个XXXX集合名,组成一个集合. private  list<可放例int数据类型或自定类> ...

  7. 虚拟机 Ubuntu18.04 tensorflow cpu 版本

    虚拟机 Ubuntu18.04 tensorflow cpu 版本 虚拟机VMware 配置: 20G容量,可扩充 2G内存,可扩充 网络采用NAT模式 平台:win10下的Ubuntu18.04 出 ...

  8. matplotlib 初步学习

    author:pprp Matplotlib数据可视化 [TOC] 安装 conda install matplotlib sudo apt-get install python-matplotlib ...

  9. 纯js提交get和post请求

    get function get(URL, PARAMS) { var temp = document.createElement("form"); temp.method = & ...

  10. 配置了java环境变量后不起作用

    我的电脑上装了好几个版本的jdk,有jdk1.6.jdk1.8.但是我的环境变量是设置jdk1.6的.然而打开cmd,查看Java版本却显示的是1.8,这让我百思不得其解.后来发现了问题. 问题:在p ...