美文网首页
GCD 和延时调用

GCD 和延时调用

作者: fordring2008 | 来源:发表于2017-02-04 10:24 被阅读24次

// GCD 和延时调用

DispatchQueue.global().async {

print("耗时的。。。努力工作")

//

DispatchQueue.main.async {

print("结束工作,更新 UI")

}

}

/*

要实现以下功能

delay(2){

print("2秒输出")

}

想取消的话,保留一个 task 的引用,然后调用 cancel

let task = delay(5) {

print("拨打110")

}

仔细想了想,还是取消为妙

cancel(task)

*/

typealias Task = (_ cancel: Bool) -> Void

// 延时执行一个block, 返回这个一个可以取消的block

func delay(_ time : TimeInterval, task:@escaping()->()) -> Task? {

func dispatch_later(block: @escaping()->()){

let t = DispatchTime.now() + time

DispatchQueue.main.asyncAfter(deadline: t, execute: block)

}

var closure:(()->Void)? = task

var result : Task?

let delayedClosure: Task = {

cancel in

if let internalClosure = closure {

if cancel == false {

DispatchQueue.main.async(execute: internalClosure)

}

}

closure = nil

result = nil

}

result = delayedClosure

dispatch_later {

if let delayedClosure = result {

delayedClosure(false)

}

}

return result

}

func cancel(_ task: Task?){

task?(true)

}

let task = delay(5) {

print("拨打110")

}

cancel(task)

相关文章

  • GCD 和延时调用

    // GCD 和延时调用 DispatchQueue.global().async { print("耗时的。。。...

  • Swift3.0一些简单变化!

    1.GCD的使用 1.最常用的GCD模板 2.延时调用 2.Any 和AnyObject Any 和 ** Any...

  • Swift小项目的细碎知识点

    一、GCD延时调用 HUD_DISMISS_TIME为延时执行的时间 二、GCD队列 三、判断一个对象是否为空 四...

  • swift 中 GCD简单使用

    1.GCD的使用 1.最常用的GCD模板//全局队列异步执行 2.延时调用 2.Any 和AnyObjectAny...

  • 7.多线程基础(七)GCD加强

    1.GCD串行队列和并发队列 2.GCD延时执行 3.GCD线程组:(的作用) 4.GCD定时器: GCD的实现 ...

  • GCD其它常用函数(四)

    一. 延迟执行 iOS常见的延时执行调用NSObject的方法 使用GCD函数(延迟并控制方法在哪个线程执行) 使...

  • 多线程之GCD常用函数

    1. GCD延时执行 1.1 延时执行常用的方法有2种 分别是 performSelector 和NSTimer...

  • iOS小知识点(GCD)

    GCD延时加载 主线程更新UI

  • GCD延时

    在主线程中延迟执行某动作,不会卡主主线程,不影响后面的东做执行 在子线程中执行某动作,不会卡主整个线程

  • GCD

    1,GCD 栅栏方法:dispatch_barrier_async 2,GCD 延时执行方法:dispatch_a...

网友评论

      本文标题:GCD 和延时调用

      本文链接:https://www.haomeiwen.com/subject/npyjittx.html