美文网首页
NSOperationQueue最大并发量、暂停、取消

NSOperationQueue最大并发量、暂停、取消

作者: iOS扫地僧 | 来源:发表于2018-03-05 10:12 被阅读0次

当使用暂停、取消任务时,需要等到正在执行的任务执行完成后,才会执行这个动作。其中取消任务的动作不可逆,取消之后任务不能重新开启。具体代码如下:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    //当self.operationQueue.suspended 为YES时执行任务,为NO时暂停任务
    //每个任务都有执行状态,暂停的时候正在执行的任务执行完,才会暂停
    self.operationQueue.suspended = !self.operationQueue.suspended;
    
    //取消所有的任务,正在执行的任务执行完,才会执行这个动作,和暂停类似。该方法不可逆,取消后不能恢复执行
//    [self.operationQueue  cancelAllOperations];
}


//NSOperationQueue,最大并发数
- (void)operationQueueMaxConcurrentOperationCount
{
    //1:创建队列
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    /*
     默认是并发队列,如果最大并发数>1,并发
     如果最大并发数==1,串行
     系统默认的并发数是-1,所有任务全部并发执行
     */
    queue.maxConcurrentOperationCount = 1;
    //2:封装操作
    NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"1------%@",[NSThread currentThread]);
    }];
    NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"2------%@",[NSThread currentThread]);
    }];
    NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"3------%@",[NSThread currentThread]);
    }];
    NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"4------%@",[NSThread currentThread]);
    }];
    NSBlockOperation *op5 = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"5------%@",[NSThread currentThread]);
    }];
    NSBlockOperation *op6 = [NSBlockOperation blockOperationWithBlock:^{
        [NSThread sleepForTimeInterval:1.0];
        NSLog(@"6------%@",[NSThread currentThread]);
    }];
    
    //3:把操作添加到队列
    [queue addOperation:op1];
    [queue addOperation:op2];
    [queue addOperation:op3];
    [queue addOperation:op4];
    [queue addOperation:op5];
    [queue addOperation:op6];
    self.operationQueue = queue;
}

相关文章

  • NSOperationQueue最大并发量、暂停、取消

    当使用暂停、取消任务时,需要等到正在执行的任务执行完成后,才会执行这个动作。其中取消任务的动作不可逆,取消之后任务...

  • iOS-基础巩固-NSOperation

    NSBlockOperation GCD & NSOperation 对比 最大并发数 队列的取消、暂停、恢复 取...

  • iOS-GCD信号量实现最大并发

    1.实现最大并发数,在iOS里,最容易使用的是NSOperationQueue,如下 NSOperationQue...

  • IOS 学习NSOperation

    定义一个全局的队列 初始化对象 设置最大并发数:不是线程的数量,而是同时执行操作的数量 挂起:暂停和继续 取消队列...

  • iOS如何取消正在执行的操作

    一、系统的取消方法 NSOperationQueue取消所有操作的方法:- (void)cancelAllOper...

  • NSOperation 和 GCD 的区别

    NSOperationQueue是把GCD封装为OC语法,额外比GCD增加了几项新功能 第一、支持限制最大并发数 ...

  • GCD

    串行队列和并行队列的区别是串行队列的最大并发量为1,若最大并发量为1,async会自动转成barrier_asyn...

  • Dispatch-Swift学习笔记

    1. DispatchSemaphore 场景:控制异步操作的最大并发, 如多图下载控制并发, 用户中途取消可以节...

  • AFImageDownloader源码学习

    AFImageDownloader:可以设置最大并发量:@property (nonatomic, assign)...

  • iOS多线程随笔

    1. 多线程的并发控制 1.1 在CGD中快速实现多线程的并发控制 NSOperationQueue来处理并发控制...

网友评论

      本文标题:NSOperationQueue最大并发量、暂停、取消

      本文链接:https://www.haomeiwen.com/subject/wnbcfftx.html