美文网首页
NSOperationQueue详解

NSOperationQueue详解

作者: AntKing | 来源:发表于2017-05-07 18:45 被阅读0次

    NSOperationQueue属相和方法

    //添加operation
    - (void)addOperation:(NSOperation *)op;
    //添加operation,并且等待其执行完毕,会阻塞线程
    - (void)addOperations:(NSArray<NSOperation *> *)ops waitUntilFinished:(BOOL)wait NS_AVAILABLE(10_6, 4_0);
    //添加operation,把操作都放在block里面了
    - (void)addOperationWithBlock:(void (^)(void))block NS_AVAILABLE(10_6, 4_0);
    //已经添加到queue里的operation
    @property (readonly, copy) NSArray<__kindof NSOperation *> *operations;
    //已经添加到queue里的operation的个数
    @property (readonly) NSUInteger operationCount NS_AVAILABLE(10_6, 4_0);
    //在queue里面一次可以执行的最多的operation的个数
    @property NSInteger maxConcurrentOperationCount;
    //是否是暂停状态
    @property (getter=isSuspended) BOOL suspended;
    //queue的名字
    @property (nullable, copy) NSString *name NS_AVAILABLE(10_6, 4_0);
    //质量
    @property NSQualityOfService qualityOfService NS_AVAILABLE(10_10, 8_0);
    //gcd的queue
    @property (nullable, assign /* actually retain */) dispatch_queue_t underlyingQueue NS_AVAILABLE(10_10, 8_0);
    //取消所有操作
    - (void)cancelAllOperations;
    //等待所有操作执行完成
    - (void)waitUntilAllOperationsAreFinished;
    
    #if FOUNDATION_SWIFT_SDK_EPOCH_AT_LEAST(8)
    //当前queue
    @property (class, readonly, strong, nullable) NSOperationQueue *currentQueue NS_AVAILABLE(10_6, 4_0);
    //mainQueue
    @property (class, readonly, strong) NSOperationQueue *mainQueue NS_AVAILABLE(10_6, 4_0);
    
    

    案列如下

    //1.创建队列
        //默认是并发队列
        NSOperationQueue *queue = [[NSOperationQueue alloc]init];
        
        //2.设置最大并发数量 maxConcurrentOperationCount
        //同一时间最多有多少个任务可以执行
        //串行执行任务!=只开一条线程 (线程同步)
        // maxConcurrentOperationCount >1 那么就是并发队列
        // maxConcurrentOperationCount == 1 那就是串行队列
        // maxConcurrentOperationCount == 0  不会执行任务
        // maxConcurrentOperationCount == -1 特殊意义 最大值 表示不受限制
        queue.maxConcurrentOperationCount = 1;
        
        //3.封装操作
        NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
            NSLog(@"1----%@",[NSThread currentThread]);
        }];
        
        NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
            NSLog(@"2----%@",[NSThread currentThread]);
        }];
        
        NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
            NSLog(@"3----%@",[NSThread currentThread]);
        }];
        
        NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{
            NSLog(@"4----%@",[NSThread currentThread]);
        }];
        
        NSBlockOperation *op5 = [NSBlockOperation blockOperationWithBlock:^{
            NSLog(@"5----%@",[NSThread currentThread]);
        }];
        NSBlockOperation *op6 = [NSBlockOperation blockOperationWithBlock:^{
            NSLog(@"6----%@",[NSThread currentThread]);
        }];
        NSBlockOperation *op7 = [NSBlockOperation blockOperationWithBlock:^{
            NSLog(@"7----%@",[NSThread currentThread]);
        }];
        
        //4.添加到队列
        [queue addOperation:op1];
        [queue addOperation:op2];
        [queue addOperation:op3];
        [queue addOperation:op4];
        [queue addOperation:op5];
        [queue addOperation:op6];
        [queue addOperation:op7];
    
    
    

    相关文章

      网友评论

          本文标题:NSOperationQueue详解

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