- NSOperationQueue的作用
NSOperation可以调用start方法来执行任务,但默认是同步执行的
如果将NSOperation添加到NSOperationQueue(操作队列)中,系统会自动异步执行NSOperation中的操作
添加操作到NSOperationQueue中
- (void)addOperation:(NSOperation *)op;
- (void)addOperationWithBlock:(void (^)(void))block;

1 -(void)blockOperation 2 { 3 //1.创建队列 4 /* 5 并发:全局并发队列,自己创建(concurrent) 6 串行:主队列,自己创建(serial) 7 */ 8 9 // NSOperationQueue 10 /* 11 主队列:凡是放到主队列里面的任务都在主线程执行[NSOperationQueue mainQueue] 12 非主队列:alloc int,同时具备了并发和串行的功能,默认是并发队列 13 */ 14 15 NSOperationQueue *queue = [[NSOperationQueue alloc]init]; 16 17 //2.封装操作 18 NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{ 19 NSLog(@"1----%@",[NSThread currentThread]); 20 }]; 21 22 NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{ 23 NSLog(@"2----%@",[NSThread currentThread]); 24 }]; 25 26 NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{ 27 NSLog(@"3----%@",[NSThread currentThread]); 28 }]; 29 30 [op3 addExecutionBlock:^{ 31 NSLog(@"4----%@",[NSThread currentThread]); 32 }]; 33 34 [op3 addExecutionBlock:^{ 35 NSLog(@"5----%@",[NSThread currentThread]); 36 }]; 37 38 39 [op3 addExecutionBlock:^{ 40 NSLog(@"6----%@",[NSThread currentThread]); 41 }]; 42 43 44 //3.添加操作到队列 45 [queue addOperation:op1]; //[op1 start] 46 [queue addOperation:op2]; 47 [queue addOperation:op3]; 48 49 //简便方法 50 [queue addOperationWithBlock:^{ 51 NSLog(@"7----%@",[NSThread currentThread]); 52 }]; 53 54 [queue addOperationWithBlock:^{ 55 NSLog(@"8----%@",[NSThread currentThread]); 56 }]; 57 58 } 59 -(void)invocation 60 { 61 //1.创建队列 62 /* 63 并发:全局并发队列,自己创建(concurrent) 64 串行:主队列,自己创建(serial) 65 */ 66 67 // NSOperationQueue 68 /* 69 主队列:凡是放到主队列里面的任务都在主线程执行[NSOperationQueue mainQueue] 70 非主队列:alloc int,同时具备了并发和串行的功能,默认是并发队列 71 */ 72 73 NSOperationQueue *queue = [[NSOperationQueue alloc]init]; 74 75 //2.封装操作 76 NSInvocationOperation *op1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download1) object:nil]; 77 78 NSInvocationOperation *op2 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download2) object:nil]; 79 80 NSInvocationOperation *op3 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download3) object:nil]; 81 82 //3.添加操作到队列 83 [queue addOperation:op1]; //[op1 start] 84 [queue addOperation:op2]; 85 [queue addOperation:op3]; 86 } 87 88 -(void)download1 89 { 90 NSLog(@"download1---%@",[NSThread currentThread]); 91 } 92 93 -(void)download2 94 { 95 NSLog(@"download2---%@",[NSThread currentThread]); 96 } 97 98 -(void)download3 99 { 100 NSLog(@"download3---%@",[NSThread currentThread]); 101 }
把继承自NSOperation的类添加到Queue中:

-(void)custom { //1.创建队列 NSOperationQueue *queue = [[NSOperationQueue alloc]init]; //2.封装操作 YSOperation *op1 = [[YSOperation alloc]init]; YSOperation *op2 = [[YSOperation alloc]init]; //3.添加操作到队列 [queue addOperation:op1]; //[op1 start] [queue addOperation:op2]; }