NSOperation/NSOperationQueue是基于GCD实现的Objective-C的API
NSOperation/NSOperationQueue是面向对象的
NSOperation/NSOperationQueue可以实现限制最大并发数量和操作之间依赖关系的特性
一、NSOperationQueue队列类型
1、主队列
NSOperationQueue *queue = [NSOperationQueue mainQueue];
2、自定义队列
NSOperationQueue *myQueue = [[NSOperationQueue alloc] init];
//设置最大并发数量
myQueue.maxConcurrentOperationCount=10;
二、操作类型
1、调度操作-使用selector
NSInvocationOperation *invocationOP = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(operationAction:) object:@"invocationOP:something"];
2、定义块操作-使用BLOCK
NSBlockOperation *blockOP = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"blickOP:%@", [NSThread currentThread]);
}];
三、定义操作之间的依赖关系
//为操作增加依赖关系:invocationOP执行完后才执行blockOP
[blockOP addDependency:invocationOP];
四、执行操作
1、将操作添加到指定队列后,立即自动开始执行操作
[queue addOperation:invocationOP];
[myQueue addOperationWithBlock:^{
NSLog(@"block:%@",[NSThread currentThread]);
}];
2、手动开始执行操作,会在当前队列开始执行
[blockOP start];
可以通过重写操作对象的start方法或main方法实现自定义的执行方式。
五、获取队列中的操作数
NSLog(@"myQueue:%lu",(unsignedlong)myQueue.operationCount);
六、获取操作的优先级
NSLog(@"invocationOP:%li",invocationOP.queuePriority);
七、获取操作的状态:isExecuting/isFinished/isCanceled/isConcurrent
NSLog(@"invocationOP:%i",blockOP.isExecuting);
网友评论