手头的项目中基本没有用到这个,但是还是要探索下。毕竟好多的地方要用这个,而且现在手机和电脑等电子设备都是多核心的,这样就成就了多线程带来更加优越的用户体验。

先记录下,自己看到的两个不错的连接:

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 的介绍和使用的更多相关文章

  1. NeHe OpenGL教程 第四十三课:FreeType库

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  2. NeHe OpenGL教程 第二十三课:球面映射

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  3. NeHe OpenGL教程 第十三课:图像字体

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  4. Magento学习第一课——目录结构介绍

    Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...

  5. Kali Linux Web 渗透测试视频教程— 第十三课-密码破解

    Kali Linux Web 渗透测试— 第十三课-密码破解 文/玄魂 目录 Kali Linux Web 渗透测试— 第十三课-密码破解............................... ...

  6. NeHe OpenGL教程 第三十三课:TGA文件

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  7. 快看Sample代码,速学Swift语言(2)-基础介绍 快看Sample代码,速学Swift语言(1)-语法速览

    快看Sample代码,速学Swift语言(2)-基础介绍 Swift语言是一个新的编程语言,用于iOS, macOS, watchOS, 和 tvOS的开发,不过Swift很多部分内容,我们可以从C或 ...

  8. Swift Playgrounds for mac基础知识介绍

    Swift Playgrounds是一款适用于iPad和Mac的革命性应用程序,它使Swift学习变得互动而有趣.它不需要编码知识,因此非常适合刚开始的学生.使用Swift解决难题,以掌握基本知识.S ...

  9. AJ学IOS(50)多线程网络之GCD简单介绍(任务,队列)

    AJ分享,必须精品 GCD简单介绍 1.什么是GCD? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD的优势 GCD是苹果 ...

随机推荐

  1. HDU 6735 结论网络流 机器人不重叠路径

    我们可以得到一个结论:没有两个机器人走过的路会重叠 所以题目就转变为了能不能让机器人的路径不重叠且每个机器人能到达终点 直接一个点朝他四连通方向的四个点连容量为1的边即可 #include<bi ...

  2. Python自动化测试PO模式

    页面元素定位信息 页面元素定位信息文件 [leadscloud_login] input_user_name = xpath>//*[@id='main']/div/div[2]/div[2]/ ...

  3. spring实例化三:CglibSubclassingInstantiationStrategy

           在SimpleInstantiationStrategy类中,留下了包含MethodOverride对象的bd对象定义未做实现,做了抽象.CglibSubclassingInstanti ...

  4. 《流畅的Python》Data model(数据/对象模型)

    第一章 Data model ⚠️整本书都是讲解Data model,第一章是一个概述. ⚠️不适合初学者.因为special method和meta programming技巧只是Python代码的 ...

  5. win10笔记本连接wifi出现:您的计算机配置似乎是正确的,但该配置或资源(DNS服务器)检测到有响应

    问题上图: 一直以来连接网线使用,很少使用WiFi了,在网线不好使的时候使用wifi发现并不怎么好用,甚至上不了网页,但是那时候也不怎么在意,不过一会网线就好使了所以也没处理,直到今天,因为接下来好多 ...

  6. 27、AOP-AOP功能测试

    27.AOP-AOP功能测试 AOP : [动态代理]指程序运行期间动态的将某段代码切入到制定方法位置进行运行的编程方式. 导入AOP模块:Spring AOP(spring-aspects) 定义一 ...

  7. java 下拉控件 转自 http://www.cnblogs.com/lhb25/p/form-enhanced-with-javascript-three.html

    表单元素让人爱恨交加.作为网页最重要的组成部分,表单几乎无处不在,从简单的邮件订阅.登陆注册到复杂的需要多页填写的信息提交功能,表单都让开发者花费了大量的时间和精力去处理,以期实现好用又漂亮的表单功能 ...

  8. 原生JS实现图片上传并预览功能

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. .NET调用AS/400上的程序(.NET CALL AS/400 PGM)

    http://www.3rgb.com/entry/dotnet_call_as400_program2 .NET连接AS400出现[Safe handle has been closed http: ...

  10. shiro认证-SSM

    shiro认证-SSM pom <dependency> <groupId>org.apache.shiro</groupId> <artifactId> ...