NSOperation NSOperationQueue
NSInvocationOperation
addDependency:
主要介绍一下这个方法。
[op1 addDependency:op2];
为op1
添加依赖。在op2
执行完成后才开始执行op1
。此方法会忽略添加进NSOperationQueue
的顺序。
NSOperationQueue
并行执行,先添加进的任务先执行。默认情况下根据addOperation:
添加的先后顺序来执行任务,如果任务本身设置了依赖关系,则按照任务设置的依赖关系来执行。
maxConcurrentOperationCount
属性可以设置队列的最大并发任务。
示例
- (void)nsoperationTest{
NSInvocationOperation *operation1 = [[NSInvocationOperation alloc]initWithTarget:self
selector:@selector(somethingNeedTime:)
object:@"任务1"];
NSInvocationOperation *operation2 = [[NSInvocationOperation alloc]initWithTarget:self
selector:@selector(somethingNeedTime:)
object:@"任务2"];
//[operation1 addDependency:operation2];
NSOperationQueue *operationQueue = [[NSOperationQueue alloc]init];
[operationQueue addOperation:operation1];
[operationQueue addOperation:operation2];
NSLog(@"已经添加完成任务");
}
-(void)somethingNeedTime:(NSString *)param{
NSLog(@"开始执行耗时任务:%@",param);
sleep(10);
NSLog(@"结束执行耗时任务:%@",param);
}
执行结果:
已经添加完成任务
开始执行耗时任务:任务1
开始执行耗时任务:任务2
结束执行耗时任务:任务1
结束执行耗时任务:任务2
我们现在设置下两个任务的依赖关系,此处要注意在添加到队列之前设置依赖关系哦!
- (void)nsoperationTest{
NSInvocationOperation *operation1 = [[NSInvocationOperation alloc]initWithTarget:self
selector:@selector(somethingNeedTime:)
object:@"任务1"];
NSInvocationOperation *operation2 = [[NSInvocationOperation alloc]initWithTarget:self
selector:@selector(somethingNeedTime:)
object:@"任务2"];
[operation1 addDependency:operation2];
NSOperationQueue *operationQueue = [[NSOperationQueue alloc]init];
[operationQueue addOperation:operation1];
[operationQueue addOperation:operation2];
NSLog(@"已经添加完成任务");
}
-(void)somethingNeedTime:(NSString *)param{
NSLog(@"开始执行耗时任务:%@",param);
sleep(10);
NSLog(@"结束执行耗时任务:%@",param);
}
再来看看打印结果:
已经添加完成任务
开始执行耗时任务:任务2
结束执行耗时任务:任务2
开始执行耗时任务:任务1
结束执行耗时任务:任务1