swift 第十三课 GCD 的介绍和使用
手头的项目中基本没有用到这个,但是还是要探索下。毕竟好多的地方要用这个,而且现在手机和电脑等电子设备都是多核心的,这样就成就了多线程带来更加优越的用户体验。
先记录下,自己看到的两个不错的连接:
http://www.cocoachina.com/swift/20161116/18097.html
http://www.jianshu.com/p/f042432e2d7d
上面这两篇博客写的相当的详细,比我自己写的好多了 (自己很惭愧 )
这里主要复制贴上自己的使用的最简单的代码好了……(笑笑的偷懒下……)
import UIKit
class ViewController: UIViewController {
let debug = 0 // 修改这个值 0 测试gcd ; 1 测试timer
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
if debug == 0 {
self.testGCD()
}else{
self.setTimer()
self.perform(#selector(stopTimer), with: nil, afterDelay: 30)
}
}
/**
gcd
*/
func testGCD() {
print("DispatchQueue.main.sync: befor 这个应该是主线程吧", Thread.current)
DispatchQueue.global().async {
print("DispatchQueue.global().async: Time task 这个是并发队列", Thread.current, "\n --: 耗时操作在后台线程中执行!")
DispatchQueue.main.async {
print("DispatchQueue.main.async: update UI", Thread.current, "\n --: 耗时操作执行完毕后在主线程更新 UI 界面!")
}
}
print("DispatchQueue.main.sync: after 主线程", Thread.current)
}
/**
gcd timer
*/
private var timer: DispatchSourceTimer?
var pageStepTime: DispatchTimeInterval = .seconds(5)
func setTimer() {
print("timer 的启动代码")
/*
deadline 结束时间
interval 时间间隔
leeway 时间精度
*/
timer = DispatchSource.makeTimerSource(queue: .main)
timer?.scheduleRepeating(deadline: .now() + pageStepTime, interval: pageStepTime)
timer?.setEventHandler {
self.changeViewColor()
}
// 启动定时器
timer?.resume()
}
func stopTimer(){
print("timer 的终止代码")
if let time = self.timer {
time.cancel()
timer = nil
}
}
func changeViewColor() {
/*
创建个随机色
*/
let red = CGFloat(arc4random_uniform(255))/CGFloat(255.0)
let green = CGFloat( arc4random_uniform(255))/CGFloat(255.0)
let blue = CGFloat(arc4random_uniform(255))/CGFloat(255.0)
let colorRun = UIColor.init(red:red, green:green, blue:blue , alpha: 1)
/*
切换个颜色
*/
self.view.backgroundColor = colorRun
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
swift 第十三课 GCD 的介绍和使用的更多相关文章
- NeHe OpenGL教程 第四十三课:FreeType库
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第二十三课:球面映射
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第十三课:图像字体
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- Magento学习第一课——目录结构介绍
Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...
- Kali Linux Web 渗透测试视频教程— 第十三课-密码破解
Kali Linux Web 渗透测试— 第十三课-密码破解 文/玄魂 目录 Kali Linux Web 渗透测试— 第十三课-密码破解............................... ...
- NeHe OpenGL教程 第三十三课:TGA文件
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 快看Sample代码,速学Swift语言(2)-基础介绍 快看Sample代码,速学Swift语言(1)-语法速览
快看Sample代码,速学Swift语言(2)-基础介绍 Swift语言是一个新的编程语言,用于iOS, macOS, watchOS, 和 tvOS的开发,不过Swift很多部分内容,我们可以从C或 ...
- Swift Playgrounds for mac基础知识介绍
Swift Playgrounds是一款适用于iPad和Mac的革命性应用程序,它使Swift学习变得互动而有趣.它不需要编码知识,因此非常适合刚开始的学生.使用Swift解决难题,以掌握基本知识.S ...
- AJ学IOS(50)多线程网络之GCD简单介绍(任务,队列)
AJ分享,必须精品 GCD简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果 ...
随机推荐
- 如果将 macOS Mojave 降级为 macOS Sierra 或者更低版本
当前系统是10.14,我想装回10.11 办法: 1. 下载10.11, 我是从themacgo网站下载的 https://themacgo.com/macos-sierra-10-12-1-dmg- ...
- python中常见的日期处理方法
今天:today = datetime.date.today() 昨天:yesterday = today - datetime.timedelta(days=1) 上个月:last_month = ...
- 五、vue基础--生命周期函数
1.创建阶段: a.beforeCreate:Vue已经创建了,但是data,methods都还没有被创建好 b.created:datamethods都被创建好了 c.beforeMount:模板经 ...
- - The superclass "javax.servlet.http.HttpServlet" was not found on the Java
网上有很多解决方法,如这种 下面是具体的解决方法:1.右击web工程->属性或Build Path->Java Build Path->Libraries-> Add Libr ...
- Greenplum实战之查询优化
本文主要分为三部分: GP优化需要准备的一些关于优化之外的知识,包括清空缓存.性能监控.执行计划分析. 具体优化措施,从以下四个方面考虑: 表.字段 sql GP配置.服务器配置 硬件及节点资源 GP ...
- java web项目中后台控制层对参数进行自定义验证 类 Pattern
Pattern pattern = Pattern.compile("/^([1-9]\d+元*|[0]{0,1})$/");//将给定的正则表达式编译到模式中 if(!" ...
- winfrom 窗体首次加载
#region Override Functions /// <summary> /// OnLoad /// </summary> /// <param name=&q ...
- JQuery实践--Ajax
Ajax概览无需刷新用户页面而发起服务器请求的技术.创建一个XHR实例: var xhr if(window.XMLHttpRequest) { xhr = new XML ...
- Vue2 响应式原理
我们经常用vue的双向绑定,改变data的某个属性值,vue就马上帮我们自动更新视图,下面我们看看原理. Object的响应式原理: 可以看到,其实核心就是把object的所有属性都加上getter. ...
- npm传参技巧
博主今天遇到一个问题,使用vue-cli-serve,想要用shelljs来执行vue-cli-serve,动态给它传“--port xxxx"但是发现”--port“怎么传都穿不进去,后面 ...