NSOperation高级操作
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// 1.创建操作
NSInvocationOperation *op1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(test:) object:@"lalala"];
// 创建操作
NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
//
NSLog(@"++++++++++++++++%@",[NSThread currentThread]);
}];
// 创建操作
NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
[self test1];
}];
// 当某个操作完成之后,就会回调这个方法.
[op3 setCompletionBlock:^{
// 对于Block,尽量用 set 方法,这样就不用去猜测 Block 的类型了.
NSLog(@"操作完成之后的回调");
}];
// 2.将操作添加到操作队列中.
// 1>创建非主队列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
NSOperationQueue *queue1 = [[NSOperationQueue alloc] init];
// 操作的执行顺序和往队列中添加操作的顺序没有关系.
// NSOperation 提供了操作按顺序执行的方法:添加操作依赖.
// 注意:1.添加操作依赖,要避免相互依赖.
// 2. 将添加操作依赖往前放.
// 对于不同操作队列中的操作,添加操作依赖依然有效.
// 操作1 op1依赖于 op2 : op2 > op1
[op1 addDependency:op2];
[op2 addDependency:op3]; // op3 > 0p2
// 只要将操作添加到操作队列中,操作队列就会执行并且管理其中的操作.
[queue addOperation:op1];
[queue addOperation:op2];
[queue1 addOperation:op3];
}
- (void)test1
{
NSLog(@"======================%@",[NSThread currentThread]);
}
- (void)test:(NSString *)str
{
NSLog(@"-----------------%@%@",str,[NSThread currentThread]);
}
@end