• NSOperationQueue_管理NSOperation-02-多线程


     1 //
     2 //  ViewController.m
     3 //  01-Thread 《NSOperationQueue》 操作队列——>>管理NSOperation(三种方式创建Operation)
     4 //
     5 //  Created by mac on 16/4/20.
     6 //  Copyright © 2016年 mac. All rights reserved.
     7 
     8 /**
     9  *  suspended:暂停
    10  */
    11 
    12 #import "SubOperation.h"
    13 
    14 #import "ViewController.h"
    15 
    16 @interface ViewController ()
    17 
    18 @end
    19 
    20 @implementation ViewController
    21 
    22 - (void)viewDidLoad {
    23     [super viewDidLoad];
    24 
    25     [self addOperationQueue];
    26 }
    27 
    28 - (void)addOperationQueue {
    29     
    30     //主队列:串行执行任务,不管你任务有多少个都是以优先级高低串行执行
    31 //    NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
    32     
    33     //
    34     NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    35     
    36     //1) 设置队列任务最大并发数
    37     queue.maxConcurrentOperationCount = 1;
    38     
    39     //3) 使得队列处于悬停状态,所有添加到队列中的任务暂缓执行
    40     queue.suspended = YES;
    41     
    42     /**NSOpetationQueue是如何管理任务的
    43      1)设置最大并发数 
    44      2)设置优先级
    45      3)设置悬停以及恢复队列中的任务运行
    46      4)设置依赖关系
    47      */
    48     
    49     //1. 最简单的开启多线程方式
    50     [queue addOperationWithBlock:^{
    51         
    52         for (int i = 0; i < 100; i ++) {
    53             NSLog(@"111=%d", i);
    54         }
    55     }];
    56     
    57     //2. 使用NSBlockOperation创建任务并添加到队列中执行
    58     NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
    59         
    60         for (int i = 0; i < 100; i ++) {
    61             NSLog(@"222=%d", i);
    62         }
    63     }];
    64 //    [blockOperation start]; //1. start开启任务
    65     [queue addOperation:blockOperation]; //2. 把任务添加到队列中执行(推荐使用)
    66 
    67     //3. 使用NSInvocationOperation来创建任务
    68     NSInvocationOperation *invocation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(invocationOperation) object:nil];
    69     
    70     //4) 添加依赖关系:(dependency)
    71     [blockOperation addDependency:invocation];
    72     
    73     [queue addOperation:invocation];
    74     
    75     //4. 自定义NSOperation
    76     SubOperation *subOperation = [[SubOperation alloc] init];
    77     subOperation.name = @"operation4-";
    78     
    79     //2) 任务执行优先级priority
    80     subOperation.queuePriority = NSOperationQueuePriorityVeryHigh;
    81     [queue addOperation:subOperation];
    82     
    83     //3) 添加任务完成后,恢复当前队列状态,开始执行
    84     queue.suspended = NO;
    85 }
    86 - (void)invocationOperation {
    87     
    88     for (int i = 0; i < 100; i ++) {
    89         NSLog(@"333=%d", i);
    90     }
    91 }
    92 @end

    主队列和主线程:队列的方式开启多线程,主队列在一定是在主线程中执行的。她俩就这关系,主队列串行执行任务。并发队列可以控制最大并发数,是并发执行任务。

    时光见证了成长,还很无知,我想一点点幼稚转为有知!
  • 相关阅读:
    HTTP POST GET 本质区别详解
    追求代码质量: 监视圈复杂度
    【置顶】用Eclipse开发Android应用程序索引贴
    Android访问WCF服务(上篇)服务端开发
    做一个T型技术人才
    创新创业大讲堂第一讲
    河海嵌芯FTP服务器开通运行
    嵌芯队团队邮箱以及邮件订阅功能使用说明
    基于视频的公共事件检测分析系统
    感知交通基于视频的交通流特征参数监测及交通综合信息服务系统
  • 原文地址:https://www.cnblogs.com/foreveriOS/p/5411595.html
Copyright © 2020-2023  润新知