引言
在iOS下使用多线程,我们通常会有两种选择,GCD或者NSOperation。这个大家都清楚,但是如何才能使用好多线程进行开发,往往在于开发者是否理解了多线程的原理和使用技巧。
今天,我给大家简单分享一些在iOS下开发时的多线程使用技巧,掌握了这些技巧,能够让大家快速的了解在iOS下的多线程开发方式。
##基本概念
- 队列(负责调度任务)
- 串行队列:一个接一个的调度任务
- 并发队列:可以同时调度多个任务
- 主队列: 专门用来在主线程上调度任务的”队列”
- 全局队列:系统提供给程序员,方便程序员使用的队列,属于并发队列
- 执行方式:
- 同步执行:当前指令不完成,就不会执行下一条指令
- 异步执行:当前指令不完成,同样可以执行下一条指令(异步是多线程的代名词)
简单理解
1、开不开线程,取决于执行任务的函数,同步不开,异步开
2、开几条线程,取决于队列,串行开一条,并发开多条(异步)
##注意点
- 主队列:(主队列不是主线程)
- 主队列不能在其他线程中调度任务!
- 如果主线程上当前正在有执行的任务,主队列暂时不会调度任务的执行!
- 异步任务,会在主线程的方法执行完成后,被调度
- 同步任务,会造成死锁
- 全局队列:
- 有关服务质量问题,使用以下代码能够做到 iOS7 & iOS8 的适配
dispatch_get_global_queue(0, 0);
##区别
- 全局队列 & 并发队列
- 名称,并发队列有名称,适合于商业级软件跟踪错误报告!
- release, 在 MRC 开发时,并发队列需要使用 dispatch_release(q);
- 结论:目前绝大多数的软件都会使用全局队列。比较优秀的第三方框架会使用自定义的并发队列!
- 建议:日常使用,用全局队列!
###全局队列 & 串行队列选择建议
- 全局队列:并发,能够调度多个线程,执行效率高
-CPU消耗大,费电
- 串行队列:一个接一个,只能够开启一条线程,执行效率低
-如果任务之间需要依赖,使用串行队列 -省电,省钱,省流量
###同步任务在多线程中的用处:
可以队列调度多个异步任务前,指定一个同步任务,让所有的异步任务,等待同步任务执行完成,这就是所谓的依赖关系!
##GCD和NSOperation对比
1、GCD
2、NSOperation
本作品采用 署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5)协议
进行许可,欢迎转载,但转载请注明来自SarielTang
,并保持转载后文章内容的完整。本人保留所有版权相关权利。
本文永久链接:http://sarieltang.github.io/2015/09/05/总结分析/2015-09-05/index/