本篇将从四个方面对iOS开发中GCD的使用进行详尽的讲解:
一、什么是GCD
二、我们为什么要用GCD技术
三、在实际开发中如何使用GCD更好的实现我们的需求
一、Synchronous & Asynchronous 同步 & 异步
二、Serial Queues & Concurrent Queues 串行 & 并发
三、Global Queues全局队列
四、Main Queue主队列
五、同步的作用
六、dispatch_time延迟操作
七、线程安全(单例dispatch_once、读写dispatch_barrier_async)
八、调度组(dispatch_group)
四、定时源事件和子线程的运行循环
一、什么是GCD
GCD 是基于 C 的 API,它是 libdispatch 的市场名称,而 libdispatch 作为 Apple 的一个库,为并发代码在多核硬件(跑 iOS 或 OS X )上执行提供有力支持。
二、我们为什么要用GCD技术
- GCD 能通过推迟昂贵计算任务并在后台运行它们来改善你的应用的响应性能。
- GCD 提供一个易于使用的并发模型而不仅仅只是锁和线程,以帮助我们避开并发陷阱。
- GCD 具有在常见模式(例如单例)上用更高性能的原语优化你的代码的潜在能力。
- GCD旨在替换NSThread等线程技术
- GCD可充分利用设备的多核
- GCD可自动管理线程的生命周期
三、在实际开发中如何使用GCD更好的实现我们的需求
一、Synchronous & Asynchronous 同步 & 异步
1)同步任务执行方式:在当前线程中执行,必须等待当前语句执行完毕,才会执行下一条语句
#pragma mark #pragma mark - 同步方法 /** 同步的打印顺序 打印 begin 打印 [NSThread currentThread] 打印 end */ - (void)syncTask { NSLog(@"begin"); // 1.GCD同步方法 /** 参数1:队列 第一个参数0其实为队列优先级DISPATCH_QUEUE_PRIORITY_DEFAULT,如果要适配 iOS 7.0 & 8.0,则始终为0 参数2:任务 */ dispatch_sync(dispatch_get_global_queue(0, 0), ^{ // 任务中要执行的代码 NSLog(@"%@", [NSThread currentThread]); }); NSLog(@"end"); }