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];
      

    结束

                      本章到此结束
                欢迎各位码友随意转载并指正
  • 相关阅读:
    ztCreateUserWizard输入密码和设置安全问题
    寻觅在office(确切的说是word) 的工具栏中添加控件的方法,找到了这个控件列表
    vs2005,combox 数据绑定和SelectedIndexChanged事件触发 引发的问题
    今天下载安装了Enterprise Library for .NET Framework 2.0 January 2006,准备试试dataAccess application block
    zt 3DO的历史,让人感慨啊
    iBM,tivoli,flash挺有意思的
    zt科学家发现自转最快中子星 比地球快1亿倍
    c#中读取应用程序路径的方法
    郁闷啊郁闷,为了access的like,折腾了一上午.
    人生
  • 原文地址:https://www.cnblogs.com/ljy-666/p/5128700.html
Copyright © 2011-2022 走看看