zoukankan      html  css  js  c++  java
  • 多线程篇-NSOperation-方法使用

    NSOperation-方法使用

    一、并发数

    • 简介

      (1)该属性控制队列是串行执行还是并发执行

      (2)如果最大并发数等于1,那么该队列是串行的,如果大于1那么是并行的

      (3)系统的最大并发数有个默认的值,为-1,如果该属性设置为0,那么不会执行任何任务

    • 代码

      //1.创建队列
      NSOperationQueue *queue = [[NSOperationQueue alloc]init];
      //2.设置最大并发数
      queue.maxConcurrentOperationCount = 2;
      
    • 补充

      设置同时最大并发操作数量

      • WIFI: 5~6条
      • 2G/3G/4G:2~3条

    二、队列的取消,暂停和恢复

        - (void)cancelAllOperations
            取消队列的所有操作。
            也可以调用:NSOperation的-(void)cancel方法取消单个操作
    
        @property (getter=isSuspended) BOOL suspended;
    
        - setSuspended:(BOOL)b
    
         YES表示暂停队列,NO表示回复队列
    
    
        if (self.opQueue.isSuspended) {
            NSLog(@"继续");
            self.opQueue.suspended = NO;
        } else {
            NSLog(@"暂停");
            self.opQueue.suspended = YES;
        }
    

    三、操作依赖

    • 简介

      1、建立操作之间的执行顺序关系
      
      2、若要建立操作之间的依赖关系,必须在操作被添加到队列之前建立
      
    • 代码

      -(void)demo{
      //创建队列
      NSOperationQueue *queue = [[NSOperationQueue alloc] init];
      
      //创建三个任务
      NSBlockOperation *operation1 = [NSBlockOperation blockOperationWithBlock:^{
          //任务1代码
          NSLog(@"operation1----%@",[NSThread currentThread]);
      }];
      NSBlockOperation *operation2 = [NSBlockOperation blockOperationWithBlock:^{
          //任务2代码
          NSLog(@"operation2----%@",[NSThread currentThread]);
      }];
      NSBlockOperation *operation3 = [NSBlockOperation blockOperationWithBlock:^{
          //任务3代码
          NSLog(@"operation3----%@",[NSThread currentThread]);
      }];
      
      //operation1 依赖于 operation2
      [operation1 addDependency:operation2];
      //operation2 依赖于 operation3
      [operation2 addDependency:operation3];
      
      //添加到队列中区
      [queue addOperation:operation1];
      [queue addOperation:operation2];
      [queue addOperation:operation3];
      
      NSLog(@"-------------------");
      

    }
    ```

    • 补充

      不能循环依赖(不能A依赖于B,B又依赖于A)。

      //把上处地方更改一下
      //operation1 依赖于 operation2
      [operation3 addDependency:operation2];
      //operation2 依赖于 operation3
      [operation2 addDependency:operation3];
      

    结束

                      本章到此结束
                欢迎各位码友随意转载并指正
  • 相关阅读:
    Http record java
    Java String constructed from byte array has bad length
    Schema
    Scale-up(纵向扩展) vs Scale-out(横向扩展)
    数据同步
    JDBC and Oracle conn.commit and conn.setAutocommit not working properly
    DGIM
    Github Blog 搭建手册
    软件探索(一)
    经典书单 —— 人文社科
  • 原文地址:https://www.cnblogs.com/ljy-666/p/5128700.html
Copyright © 2011-2022 走看看