通过NSOperationQueue实现线程依赖

例子:现有三个任务A、B、C,要求三个任务都异步执行,且B依赖A,C依赖B。

  1. @implementation ViewController
  2. - (void)viewDidLoad {
  3. [super viewDidLoad];
  4. // 创建一个队列
  5. NSOperationQueue *queue = [[NSOperationQueue alloc] init];
  6. // 设置最大并发数
  7. queue.maxConcurrentOperationCount = 3;
  8. // 创建三个任务
  9. NSBlockOperation *operationA = [NSBlockOperation blockOperationWithBlock:^{
  10. NSLog(@"TaskA");
  11. }];
  12. NSBlockOperation *operationB = [NSBlockOperation blockOperationWithBlock:^{
  13. NSLog(@"TaskB");
  14. }];
  15. NSBlockOperation *operationC = [NSBlockOperation blockOperationWithBlock:^{
  16. NSLog(@"TaskC");
  17. }];
  18. // 设置三个任务的依赖关系
  19. [operationB addDependency:operationA];
  20. [operationC addDependency:operationB];
  21. // 添加操作到队列中
  22. [queue addOperation:operationA];
  23. [queue addOperation:operationB];
  24. [queue addOperation:operationC];
  25. }
  26. @end
  27. 结果:按照要求的依赖顺序输出了日志

注意:

  • 必须在操作被添加到队列之前设置依赖关系
  • 不能循环依赖