[第2章]多线程:GCD的简单使用(1)

时间:2021-12-29 16:15:11

一、关于

直接贴官方文档:

[第2章]多线程:GCD的简单使用(1)

解析:
1、系统、全面地提升并行代码在多核的性能;
2、更好地调度系统资源;
3、使用GCD之前,考虑使用Cocoa类似的功能(via NSOperation and block objects)会比较简单或更适合应用开发。

附:
[第2章]多线程:GCD的简单使用(1)

二、队列

介绍

官方文档:

[第2章]多线程:GCD的简单使用(1)
注意:修改UI的操作,都应该在主队列中处理;否则,会导致UI操作的延迟。

有三种获得方式:
1、dispatch_main_queue;主队列,串行的。

2、dispatch_get_global_queue::;全局队列,并行的。

3、dispatch_queue_create::;自定义队列,串行或并行。

1、The main queue

[第2章]多线程:GCD的简单使用(1)

2、The global queue

[第2章]多线程:GCD的简单使用(1)

附:优先级

[第2章]多线程:GCD的简单使用(1)

[第2章]多线程:GCD的简单使用(1)

3、Other queue

[第2章]多线程:GCD的简单使用(1)

三、函数

1、(异步)dispatch_async::

[第2章]多线程:GCD的简单使用(1)

代码实现

// 使用系统的全局队列,优先级高于标准。
var queue = dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)

dispatch_async(queue, { () -> Void in

    // code..

    // 在主线程上修改UI。
    dispatch_async(dispatch_get_main_queue(), { () -> Void in
        // code..
    })
})

2、(异步)dispatch_after:::

该函数主要用作优化、提升性能。
注意:建议使用主队列。
[第2章]多线程:GCD的简单使用(1)

附:时间参数

[第2章]多线程:GCD的简单使用(1)

苹果建议用的转换单位:
[第2章]多线程:GCD的简单使用(1)

代码实现

// 3秒时间。
var time = dispatch_time(DISPATCH_TIME_NOW, (Int64)(NSEC_PER_SEC * 3))

// 苹果建议放到主队列,因为此函数一般用于操作UI。
dispatch_after(time, dispatch_get_main_queue()) { () -> Void in
    // code..
}

3、(同步)dispatch_apply:::

该函数主要用作优化、提升性能。
一般使用系统全局队列。
使用场合:1、耗时;2、循环次数少;3、由于同步,可结合异步函数使用。
[第2章]多线程:GCD的简单使用(1)

代码实现

dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0), { () -> Void in

    dispatch_apply(3, dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)) { (index) -> Void in
    // code..
    }
})

下一篇:调度组使用(dispatch_group)