NSOperation

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)