04.iOS多线程方案

一: 总览

  • pthread

    • 几乎不用

    • C语言的,全部由程序员自己管理

  • NSThread

    • 程序员自己管理线程,用得少

  • GCD

    • 自动管理

  • NSOperation

    • 基于GCD

    • 比GCD多了一些使用功能

    • 面向对象

二: GCD

特点

  • GCD会自动是用更多的CPU内核

  • 自动管理线程生命周期(创建,调度,销毁等)

  • 程序员只用高数GCD想要如何执行什么任务,不用编写线程管理代码

group

  • 使用 enter leave 的时候一定要出入数量对等否则会崩溃的

dispatch_barrier_async

多个任务分两组完成

dispatch_apply 并行遍历

和group关联的API,会在所有任务执行完成后执行后续操作 "完成"会在全部执行完成后打印出来

  • 应用场景

    • 可在某些场景代替for循环

      • 全部遍历,无顺序要求

    • 不同文件并行iOS

三: NSOperation

基于GCD封装 配合NSOperationQueue实现多线程

  • 使用步骤

    • 创建任务

      • 先将需要执行的操作封装到NSOperation对象中

    • 创建队列

      • 创建NSOperationQueue

    • 将任务加入队列

      • 将NSOperation加入到NSOperationQueue中

  • 使用注意

    • 由于NSOperation是抽象类需要使用其子类

      • NSInvocationOperation

        • 指定Target和Selectore

      • NSBlockOperation

        • 基于Block

      • 定义继承自NSOperation的子类

NSOperationQueue

暂停和取消不是立刻取消当前操作,而是等当前的操作执行完之后不再进行新的操作。

参考

http://www.cocoachina.com/articles/19769

Last updated

Was this helpful?