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

结束

                  本章到此结束
            欢迎各位码友随意转载并指正
原文地址:https://www.cnblogs.com/ljy-666/p/5128700.html