iOS 多线程开发之NSOperation与NSOperation Queue

NSOperation实例封装了需要执行的操作和执行操作所需的数据,并且能够以并发或非并发的方式执行这个操作.有以下主要操作方法

  • 开始
[opertion start];
  • 取消
[opertion cancel];
  • 监听完成
operation.completionBlock = ^() {  
   NSLog(@"执行完毕");  
}
iOS 多线程开发之NSOperation与NSOperation Queue_第1张图片
可以使用它的子类有以方法
iOS 多线程开发之NSOperation与NSOperation Queue_第2张图片
  • 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];
iOS 多线程开发之NSOperation与NSOperation Queue_第3张图片
正确

iOS 多线程开发之NSOperation与NSOperation Queue_第4张图片
错误的依赖关系

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,那么该队列就是一个串行队列
iOS 多线程开发之NSOperation与NSOperation Queue_第5张图片
  • 默认 queue.maxConcurrentOperationCount = -1,并发数量由系统决定。
队列中operation执行顺序

1,首先查看operation的状态是否准备好(ready)以及其依赖关系。
2,查看operation的执行优先级(NSOperationQueuePriority)。

参考文档

Operation Queues
Advanced NSOperations

你可能感兴趣的:(iOS 多线程开发之NSOperation与NSOperation Queue)