快速掌握iOS开发 - 多线程开发技巧

在iOS下使用多线程,我们通常会有两种选择,GCD或者NSOperation。这个大家都清楚,但是如何才能使用好多线程进行开发,往往在于开发者是否理解了多线程的原理和使用技巧。
今天,我给大家简单分享一些在iOS下开发时的多线程使用技巧,掌握了这些技巧,能够让大家快速的了解在iOS下的多线程开发方式。

基本概念

  1. 队列(负责调度任务)
    • 串行队列:一个接一个的调度任务
    • 并发队列:可以同时调度多个任务
    • 主队列: 专门用来在主线程上调度任务的”队列”
    • 全局队列:系统提供给程序员,方便程序员使用的队列,属于并发队列
  2. 执行方式:
    • 同步执行:当前指令不完成,就不会执行下一条指令
    • 异步执行:当前指令不完成,同样可以执行下一条指令(异步是多线程的代名词)

简单理解

1、开不开线程,取决于执行任务的函数,同步不开,异步开
2、开几条线程,取决于队列,串行开一条,并发开多条(异步)

注意点

  1. 主队列:(主队列不是主线程)
    • 主队列不能在其他线程中调度任务!
    • 如果主线程上当前正在有执行的任务,主队列暂时不会调度任务的执行!
    • 异步任务,会在主线程的方法执行完成后,被调度
    • 同步任务,会造成死锁
  2. 全局队列:
    • 有关服务质量问题,使用以下代码能够做到 iOS7 & iOS8 的适配
      dispatch_get_global_queue(0, 0);

区别

  1. 全局队列 & 并发队列
    • 名称,并发队列有名称,适合于商业级软件跟踪错误报告!
    • release, 在 MRC 开发时,并发队列需要使用 dispatch_release(q);
    • 结论:目前绝大多数的软件都会使用全局队列。比较优秀的第三方框架会使用自定义的并发队列!
    • 建议:日常使用,用全局队列!

全局队列 & 串行队列选择建议

  1. 全局队列:并发,能够调度多个线程,执行效率高
    -CPU消耗大,费电
  2. 串行队列:一个接一个,只能够开启一条线程,执行效率低
    -如果任务之间需要依赖,使用串行队列
    -省电,省钱,省流量

同步任务在多线程中的用处:

可以队列调度多个异步任务前,指定一个同步任务,让所有的异步任务,等待同步任务执行完成,这就是所谓的依赖关系!

GCD和NSOperation对比

1、GCD

GCD 在 iOS 4.0 推出的,主要针对多核处理器做了优化的并发技术,是 C 语言的
    -将"任务"添加到"队列[串行/并发/主队列/全局队列]",并且指定执行任务的函数[同步/异步]
    -线程间通讯 dispatch_get_main_queue()
    -提供了一些 NSOperation 不具备的功能
        - 一次性执行
        - 延迟执行
        - 调度组(在op中也可以做到,就是有点麻烦)

2、NSOperation

NSOperation 在 iOS 2.0 推出的,苹果推出 GCD 之后,对 NSOperation 底层重写了一遍
    -将操作[异步执行的任务]添加到队列[并发队列],就会立即异步执行
    -线程间通讯 mainQueue
    -提供了一些 GCD 实现起来比较困难的功能!
        - 最大并发操作数
        - 队列的暂停/继续
        - 取消所有操作
        - 指定操作之间的依赖关系 (GCD 用同步实现)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值