美文网首页
NSOperation

NSOperation

作者: labi3285 | 来源:发表于2017-09-14 23:03 被阅读9次

    1、创建:

    方式一:

    // 创建操作
    NSInvocationOperation *op = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(test) object:nil];
    // 创建队列并把操作添加到队列
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
        [queue addOperation:op];
    

    方式二:

    // 创建操作
    NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
        // sth long to do
    }];
        
    // 创建队列并添加操作
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    [queue addOperation:op];
    

    方式三:常见操作(线程通信):

    // 自定义队列
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];    
    // 在自定义队列执行
    [queue addOperationWithBlock:^{
        NSLog(@"a long operation");       
        // sth to do in sel-cre queue
        // 在主队列执行
        [[NSOperationQueue mainQueue] addOperationWithBlock:^{
            NSLog(@"update UIs");
            // sth to do in main queue
        }];
    }];
    

    2、暂停

    queue.suspended = !queue.isSuspended;
    这个操作需要谨慎,在queue.operationCount == 0 的时候要操作,会产生不必要的麻烦,需要判断一下。

    3、取消

    [queue cancelAllOperations];
    

    4、设置最大并发线程数:

    queue.maxConcurrentOperationCount = 3;
    

    5、设置依赖关系:

    依赖关系可以让几个不同的操作有执行的先后顺序(在不同线程):

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"A");
    }];
        
    NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"B");
    }];
        
    NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
        NSLog(@"C");
    }];    
    
    [op2 addDependency:op1];
    [op3 addDependency:op2];
    
    [queue addOperations:@[op1, op2, op3] waitUntilFinished:NO];
    

    相关文章

      网友评论

          本文标题:NSOperation

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