1.操作依赖
NSOperation之间可以设置依赖来保证执行顺序
比如一定要让操作A执行完后,才能执行操作B,可以这么写
[operationB addDependency:operationA]; // 操作B依赖于操作A
可以在不同queue的NSOperation之间创建依赖关系
注意:不能相互依赖
比如A依赖B,B依赖A
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//1.创建队列
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
NSOperationQueue *queue1 = [[NSOperationQueue alloc]init];
//2.封装操作
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"1----%@",[NSThread currentThread]); }];
NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"2----%@",[NSThread currentThread]); }];
NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"3----%@",[NSThread currentThread]); }];
NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"4----%@",[NSThread currentThread]); }];
NSBlockOperation *op5 = [NSBlockOperation blockOperationWithBlock:^{
for (NSInteger i=; i<; i++) {
NSLog(@"5-%zd---%@",i,[NSThread currentThread]);
} }]; //添加操作依赖,注意不能循环依赖
[op1 addDependency:op5];
[op1 addDependency:op4]; //添加操作到队列
[queue addOperation:op1];
[queue addOperation:op2];
[queue addOperation:op3];
[queue addOperation:op4];
[queue1 addOperation:op5];
}
示例
2.操作的监听
可以监听一个操作的执行完毕
- (void (^)(void))completionBlock;
- (void)setCompletionBlock:(void (^)(void))block;
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//1.创建队列
NSOperationQueue *queue = [[NSOperationQueue alloc]init]; //2.封装操作 NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"4----%@",[NSThread currentThread]); }];
NSBlockOperation *op5 = [NSBlockOperation blockOperationWithBlock:^{
for (NSInteger i=; i<; i++) {
NSLog(@"5-%zd---%@",i,[NSThread currentThread]);
} }]; //操作监听
op4.completionBlock = ^{
NSLog(@"op4已经完成了---%@",[NSThread currentThread]);
}; [queue addOperation:op4];
[queue addOperation:op5];
}
示例