YOU'VE MADE A BRAVE DECISION, WELCOME.

每一个不曾起舞的日子都是对生命的辜负。

NSOperation相关概念

  • 配合使用NSOperation和NSOperationQueue也可以实现多线程
    • 先将需要执行的操作封装到一个NSOperation对象中
    • 将NSOperation对象添加到一个NSOperationQueue对象中
    • 系统会自动将NSOperationQueue中的NSOperation取出来
    • 将取出的NSOperation封装的操作放到一条线程中去执行
  • 抽象类,并不具有封装操作的能力,必须使用它的子类:

    • NSInvocationOperation

      • 创建NSInvocationOperation对象

        • *ip =[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(operation) object:nil] ```
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          - 调用start方法
          - `[ip start]`
          - 一旦执行操作,就回调用target的selector方法
          - 注意
          - 默认情况下,调用start方法后并不会开启一条新的线程去执行操作,而是在当前线程同步执行操作
          - 只有将NSOperation放到NSOperationQueue中,才会异步执行操作
          - NSBlockOperation
          - 创建NSBlockOperation对象
          -

          NSBlockOperation *bp = [NSBlockOperation blockOperationWithBlock:^{

          //在此封装操作
          }];
          

          ```

      • 通过addExutionBlock:方法添加

        • [bp addExecutionBlock:^{//额外的操作}]
      • 注意

        • 只要NSBlockOperation封装的操作大于1,就回开启线程,异步执行
    • NSOperationQueue

      • 只有将NSOperation放到NSOperationQueue中,才会异步执行操作
      • 添加到NSOperationQueue
        • 调用addOperation:方法
        • 调用addOperationWithBlock:方法
    • 自定义子类继承自NSOperation,实现内部相应的方法

  • 任务依赖—-如果A依赖B,等B执行完成之后在执行A
    • 任务之间不能相互依赖
    • addDependency:前者依赖于后者,后者先执行,再执行前者