1.操作依赖
NSOperation之间可以设置依赖来保证执行顺序
比如一定要让操作A执行完后,才能执行操作B,可以这么写
[operationB addDependency:operationA]; // 操作B依赖于操作A
可以在不同queue的NSOperation之间创建依赖关系
注意:不能相互依赖
比如A依赖B,B依赖A
1 -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 2 { 3 //1.创建队列 4 NSOperationQueue *queue = [[NSOperationQueue alloc]init]; 5 NSOperationQueue *queue1 = [[NSOperationQueue alloc]init]; 6 //2.封装操作 7 NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{ 8 NSLog(@"1----%@",[NSThread currentThread]); 9 10 }]; 11 NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{ 12 NSLog(@"2----%@",[NSThread currentThread]); 13 14 }]; 15 NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{ 16 NSLog(@"3----%@",[NSThread currentThread]); 17 18 }]; 19 NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{ 20 NSLog(@"4----%@",[NSThread currentThread]); 21 22 }]; 23 NSBlockOperation *op5 = [NSBlockOperation blockOperationWithBlock:^{ 24 for (NSInteger i=0; i<10000; i++) { 25 NSLog(@"5-%zd---%@",i,[NSThread currentThread]); 26 } 27 28 29 }]; 30 31 //添加操作依赖,注意不能循环依赖 32 [op1 addDependency:op5]; 33 [op1 addDependency:op4]; 34 35 //添加操作到队列 36 [queue addOperation:op1]; 37 [queue addOperation:op2]; 38 [queue addOperation:op3]; 39 [queue addOperation:op4]; 40 [queue1 addOperation:op5]; 41 }
2.操作的监听
可以监听一个操作的执行完毕
- (void (^)(void))completionBlock;
- (void)setCompletionBlock:(void (^)(void))block;
1 -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 2 { 3 //1.创建队列 4 NSOperationQueue *queue = [[NSOperationQueue alloc]init]; 5 6 //2.封装操作 7 8 NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{ 9 NSLog(@"4----%@",[NSThread currentThread]); 10 11 }]; 12 NSBlockOperation *op5 = [NSBlockOperation blockOperationWithBlock:^{ 13 for (NSInteger i=0; i<10000; i++) { 14 NSLog(@"5-%zd---%@",i,[NSThread currentThread]); 15 } 16 17 18 }]; 19 20 //操作监听 21 op4.completionBlock = ^{ 22 NSLog(@"op4已经完成了---%@",[NSThread currentThread]); 23 }; 24 25 26 [queue addOperation:op4]; 27 [queue addOperation:op5]; 28 }
浙公网安备 33010602011771号