NSOperation实例封装了需要执行的操作和执行操作所需的数据,并且能够以并发或非并发的方式执行这个操作.有以下主要操作方法
- 开始
[opertion start];
- 取消
[opertion cancel];
- 监听完成
operation.completionBlock = ^() {
NSLog(@"执行完毕");
}
可以使用它的子类有以方法
- NSInvocationOperation
NSInvocationOperation *invocationOperation = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(test) object:nil];
[invocationOperation start];
- NSBlockOperation
NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"test blockOperation");
}];
[blockOperation start];
Operation 执行优先级
typedef NS_ENUM(NSInteger, NSOperationQueuePriority) {
NSOperationQueuePriorityVeryLow = -8L,
NSOperationQueuePriorityLow = -4L,
NSOperationQueuePriorityNormal = 0,
NSOperationQueuePriorityHigh = 4,
NSOperationQueuePriorityVeryHigh = 8
};
Operation 依赖关系
[operationB addDependency:operationA];
正确
错误的依赖关系
NSOperation Queue
一个operation可以调用start方法执行(默认是同步),也可以添加到operation queue中执行(异步)。
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
- 添加一个operation
[queue addOperation:operation];
- 添加一组operations
[queue addOperations:@[operation] waitUntilFinished:No];
- 添加一block形式operation
[queue addOperationWithBlock:^{
NSLog(@"tset");
}];
队列的最大并发操作数量(
@property NSInteger maxConcurrentOperationCount;
- 如果queue.maxConcurrentOperationCount = 1,那么该队列就是一个串行队列
- 默认 queue.maxConcurrentOperationCount = -1,并发数量由系统决定。
队列中operation执行顺序
1,首先查看operation的状态是否准备好(ready)以及其依赖关系。
2,查看operation的执行优先级(NSOperationQueuePriority)。
网友评论