#import "HMViewController.h"@interface HMViewController ()@end@implementation HMViewController- (void)viewDidLoad{ [super viewDidLoad]; [self operationQueue2];}- (void)operationQueue2{ NSBlockOperation *operation1 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"NSBlockOperation------下载图片1---%@", [NSThread currentThread]); }]; NSBlockOperation *operation2 = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@"NSBlockOperation------下载图片2---%@", [NSThread currentThread]); }]; [operation2 addExecutionBlock:^{ NSLog(@"NSBlockOperation------下载图片22---%@", [NSThread currentThread]); }]; NSOperationQueue *queue = [[NSOperationQueue alloc] init]; queue.maxConcurrentOperationCount = 2; [queue addOperation:operation1]; [queue addOperation:operation2]; [queue addOperationWithBlock:^{ NSLog(@"NSBlockOperation------下载图片3---%@", [NSThread currentThread]); }];}- (void)opeationListen{ NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ for (int i = 0; i<10; i++) { NSLog(@"NSBlockOperation------下载图片---%@", [NSThread currentThread]); } }]; operation.completionBlock = ^{ // ...下载完图片后想做事情 NSLog(@"NSBlockOperation------下载图片完毕---%@", [NSThread currentThread]); }; NSOperationQueue *queue = [[NSOperationQueue alloc] init]; [queue addOperation:operation];}- (void)operationQueue{ // 1.封装操作 NSInvocationOperation *operation1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(download) object:nil];// operation1.queuePriority = NSOperationQueuePriorityHigh NSInvocationOperation *operation2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run) object:nil]; NSBlockOperation *operation3 = [NSBlockOperation blockOperationWithBlock:^{ for (int i = 0; i < 10; i++) { NSLog(@"NSBlockOperation------下载图片---%@", [NSThread currentThread]); [NSThread sleepForTimeInterval:0.1]; } }];// [operation3 addExecutionBlock:^{// for (int i = 0; i<10; i++) {// NSLog(@"NSBlockOperation------下载图片2---%@", [NSThread currentThread]);// [NSThread sleepForTimeInterval:0.1];// }// }]; // 2.创建队列 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; queue.maxConcurrentOperationCount = 2; // 2 ~ 3为宜 // 设置依赖 [operation2 addDependency:operation3]; [operation3 addDependency:operation1]; // 3.添加操作到队列中(自动执行操作, 自动开启线程) [queue addOperation:operation1]; [queue addOperation:operation2]; [queue addOperation:operation3]; // [queue setSuspended:YES];}- (void)blockOperation{ // 1.封装操作// NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{// NSLog(@"NSBlockOperation------下载图片1---%@", [NSThread currentThread]);// }]; NSBlockOperation *operation = [[NSBlockOperation alloc] init]; [operation addExecutionBlock:^{ NSLog(@"NSBlockOperation------下载图片1---%@", [NSThread currentThread]); }]; [operation addExecutionBlock:^{ NSLog(@"NSBlockOperation------下载图片2---%@", [NSThread currentThread]); }]; [operation addExecutionBlock:^{ NSLog(@"NSBlockOperation------下载图片3---%@", [NSThread currentThread]); }]; // 2.执行操作 [operation start];}- (void)invocationOperation{ // 1.创建操作对象, 封装要执行的任务 NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(download) object:nil]; // 2.执行操作(默认情况下, 如果操作没有放到队列queue中, 都是同步执行) [operation start];}- (void)download{ for (int i = 0; i<10; i++) { NSLog(@"------download---%@", [NSThread currentThread]); [NSThread sleepForTimeInterval:0.1]; }}- (void)run{ for (int i = 0; i<10; i++) { NSLog(@"------run---%@", [NSThread currentThread]); [NSThread sleepForTimeInterval:0.1]; }}@end