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
主队列和主线程:队列的方式开启多线程,主队列在一定是在主线程中执行的。她俩就这关系,主队列串行执行任务。并发队列可以控制最大并发数,是并发执行任务。
时间: 2024-10-11 05:07:52