手头的项目中基本没有用到这个,但是还是要探索下。毕竟好多的地方要用这个,而且现在手机和电脑等电子设备都是多核心的,这样就成就了多线程带来更加优越的用户体验。
先记录下,自己看到的两个不错的连接:
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() } }
|
请发表评论