gcd的封装(swift)

gcd的封装(swift)

by 伍雪颖

override
func viewDidLoad() {

delay(2)
{

println("2s later")

}

let task =
delay(5)
{

println("call")

}

cancel(task)

}

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

func delay(time:NSTimeInterval,task:()->())
-> Task? {

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

dispatch_after(

dispatch_time(

DISPATCH_TIME_NOW,

Int64(time *
Double(NSEC_PER_SEC))),

dispatch_get_main_queue(),

block)

}

var closure:
dispatch_block_t? = task

var result:
Task?

let delayedClosure:
Task = {

cancel in

if
let internalClosure = closure {

if (cancel ==
false) {

dispatch_async(dispatch_get_main_queue(),
internalClosure);

}

}

closure = nil

result = nil

}

result = delayedClosure

dispatch_later {

if
let delayedClosure = result {

delayedClosure(cancel: false)

}

}

return result;

}

func cancel(task:Task?)
{

task?(cancel: true)

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 20:33:25

gcd的封装(swift)的相关文章

GCD 延时方法 (Swift)

func delay(delay:Double, closure:()->()) { dispatch_after( dispatch_time( DISPATCH_TIME_NOW, Int64(delay * Double(NSEC_PER_SEC)) ), dispatch_get_main_queue(), closure) } //And now you can talk like this: delay(0.4) { // do stuff } GCD 延时方法 (Swift)

GCD编程(封装GCD)

//GCDGroup 类 @interface GCDGroup : NSObject @property (strong, nonatomic, readonly) dispatch_group_t dispatchGroup; #pragma 初始化以及释放 - (instancetype)init; #pragma 用法 - (void)enter; - (void)leave; - (void)wait; - (BOOL)wait:(int64_t)delta; @end #import

GCD多线程在swift中的变化

1.异步线程加载主线程刷新 DispatchQueue.global().async { // TODO:执行异步线程网络请求 DispatchQueue.main.async(execute: { // TODO:执行主线程刷新主界面 }) } 2.延时执行 let time : TimeInterval = 2.0 DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + time) { // TODO:执行延时代码 }

iOS--多线程具体总结(OC&Swift)

整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项.当然也会给出几种多线程的案例,在实际使用中感受它们的区别.使用 Swift 和 Objective-C 两种语言讲解 在 iOS 中其实目前有 4 套多线程方案,他们分别是: 1,Pthreads 2,NSThread 3,GCD 4,NSOperation & NSOperationQueue Pthreads POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准.该标准定义了创建和操纵线程

iOS四种多线程(swift和oc)

在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项.当然也会给出几种多线程的案例,在实际使用中感受它们的区别.还有一点需要说明的是,这篇文章将会使用 Swift 和 Objective-c 两种语言讲解,双语幼儿园.OK,let's begin! 概述 这篇文章中,我不会说多线程是什么.线程和进程的区别.多线程有什么用,当然我也不会说什么是串行.什么是并行等问题,这些我们应该都知道的. 在 iOS 中其实目前有 4 套多线程方案,他们分别是: Pthreads

iOS 开发线程 gcd

基础知识: 下午9:09 一.基础概念 1.什么是GCD 全称是Grand Central Dispath 纯C语言编写,提供非常多且强大的函数,是目前推荐的多线程开发方法,NSOperation便是基于GCD的封装 2.GCD的优势 1.为多核的并行运算提出了解决方案 2.GCD会自动利用更多的CPU内核,比如 双核,四核 3.GCD自动管理线程的生命周期(创建线程,调度任务,销毁线程) 4.程序员只需告诉GCD想要执行什么任务,不需要编写任何线程管理代码 3.GCD中的两个核心概念 1.任务

step 7 NSOperation(高级/GCD对比)

高级演练 全局队列 /// 全局操作队列,统一管理所有的异步操作 @property (nonatomic, strong) NSOperationQueue *queue; - (NSOperationQueue *)queue { if (_queue == nil) { _queue = [[NSOperationQueue alloc] init]; } return _queue; } 最大并发操作数 /// MARK: - 最大并发操作数 - (void)opDemo1 { // 设

iOS学习之GCD

多线程编程 线程定义:一个CPU执行的CPU命令 列一条无分叉的路径就叫线程. 多线程:执行多个不同的CPU命令 有多条路径. 线程的使用:主线程(又叫作UI线程)主要任务是处理UI事件,显示和刷新UI,(只有主线程有直接修改UI的能力)耗时的操作放在子线程(又叫作后台线程.异步线程). 多线程容易引发的编程问题: 数据竞争:多个线程更新相同的资源会导致数据不一致. 死锁:停止等待事件的线程会导致多个线程相互持续等待. 太多线程会消耗大量内存. Thread Safe(线程安全):一段线程安全的

JSPatch 遇上swift

swift使用JSPatch要点: 继承自NSObject的Swift类,其继承自父类的方法具有动态性,其他自定义方法.属性需要加dynamic修饰才可以获得动态性(public属性除外) 例子可参看项目中的:demo1.js, demo1_1.js, demo2.js 纯Swift类没有动态性.也就是说无法重写纯swift类的方法和属性.demo6,demo7 JSPatch在进行到overrideMethod进行方法实现IMP替换时要求class实现NSCoping协议,而不继承自NSObj