#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