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

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

时光见证了成长,还很无知,我想一点点幼稚转为有知!
原文地址:https://www.cnblogs.com/foreveriOS/p/5411595.html