• 多线程篇-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];
      

    结束

                      本章到此结束
                欢迎各位码友随意转载并指正
  • 相关阅读:
    网站要满足用户的期望
    在网站内如何引导你的用户
    网站要一步一步的引导用户
    photoshop:制作sprite拼贴图片
    photoshop:css3插件
    注册表修改PSD关联photoshop
    photoshop:找不到增效工具入口点
    ajax:$.get()
    Photoshop支持ico输出
    JavaScript数字精度丢失问题总结
  • 原文地址:https://www.cnblogs.com/ljy-666/p/5128700.html
Copyright © 2020-2023  润新知