美文网首页iOS DeveloperiOS点点滴滴iOS开发技巧
iOS 多线程开发之NSOperation与NSOperatio

iOS 多线程开发之NSOperation与NSOperatio

作者: samzzz | 来源:发表于2016-01-07 22:51 被阅读238次

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)。

参考文档

Operation Queues
Advanced NSOperations

相关文章

网友评论

    本文标题:iOS 多线程开发之NSOperation与NSOperatio

    本文链接:https://www.haomeiwen.com/subject/orxphttx.html