美文网首页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