NSOperation操作依赖和监听

Posted on 2016-07-17 17:18  柠檬片  阅读(290)  评论(0)    收藏  举报

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 }
示例