iOS多线程(GCD)(swift)

实现iOS多线程主要有三种方式

一、GCD

他是苹果设计的在底层管理线程的方法 GCD最主要的概念就是队列,可分为两种类型,一为串行队列,二为并行队列,开发时用到的有三种队列:主队列、全局队列、自定义队列

1、创建gcd队列

let myQueue:dispatch_queue_t =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)

//第一个参数是优先级
//用异步方式执行队列里的方法      
dispatch_async(myQueue, { () ->Void in
        //任务
    })

2、自定义队列

let myqueue2:dispatch_queue_t = dispatch_queue_create("xindong.com",
DISPATCH_QUEUE_CONCURRENT)
//最后一个参数指的是并行的队列,还有一个是DISPATCH_QUEUE_SERIAL(串行)

3、延迟执行

let myTime:dispatch_time_t=dispatch_time(DISPATCH_TIME_NOW, 
(Int64)(NSEC_PER_SEC*2))
//后面那个参数代表两秒,苹果公司建议这样写,这是转化为gcd能读懂的时间

dispatch_after(myTime,dispatch_get_main_queue(), { () ->Void in
        //任务
    })//苹果公司建议用主队列

4、多次执行
    dispatch_apply(3,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0))
     { (UInt index) -> Voidin
        //任务
    }//执行3次,一般放在并行队列中
    //他是一个同步操作会阻塞主线程,所以一般放在异步执行的代码里

5、调度组

    let mygroup =dispatch_group_create()//创建调度组
    dispatch_group_async(mygroup, myQueue) { () ->Void in
    //异步执行调度组里面的内容
        //加载图片数据
        dispatch_async(dispatch_get_main_queue(), { () ->Void in
            //主线程更新ui
        })
    }       dispatch_group_notify(mygroup,dispatch_get_main_queue()) { () ->Void in
        //这个方法在调度组里面的内容全部执行完毕后调用
    }

dispatch_group_wait(mygroup,DISPATCH_TIME_FOREVER)
//一直等到调度组执行完,在执行下面的,这是一个同步操作,会阻塞主线程

6、暂停队列

dispatch_suspend(myQueue)//不能暂停主队列和系统队列

7、恢复队列

    dispatch_resume(myQueue)

Comments