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];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容