Swift 能否对NSOperation对象使用跨队列依赖关系?

Swift 能否对NSOperation对象使用跨队列依赖关系?,swift,dependencies,nsoperation,nsoperationqueue,Swift,Dependencies,Nsoperation,Nsoperationqueue,具有跨队列依赖关系操作是否可能/合法 考虑以下几点 let operationA = NSBlockOperation(block: someBlock) let operationB = NSBlockOperation(block: someOtherBlock) let operationC = NSBlockOperation(block: finalBlock) operationC.addDependency(operationA) operationC.addDependency

具有跨队列依赖关系操作是否可能/合法

考虑以下几点

let operationA = NSBlockOperation(block: someBlock)
let operationB = NSBlockOperation(block: someOtherBlock)

let operationC = NSBlockOperation(block: finalBlock)
operationC.addDependency(operationA)
operationC.addDependency(operationB)

OperationQueue().addOperation(operationC)
OperationQueue().addOperation(operationA)
OperationQueue().addOperation(operationB)
我在文档中没有看到任何地方说这是一种受限使用,但我也不确定这是否可能/支持。(注意:我也不是说这是否是一个好的实践。只是试着“戳”一下语言,看看什么可能是思想的食粮。)

是的

依赖项的另一个优点是它们不受操作队列的限制。现在,我这么说是什么意思?如果应用程序中有两个操作队列,第一个队列中的操作可以依赖于第二个队列中的操作

以下是一个您可以尝试的示例:

NSOperationQueue *queue1 = [[NSOperationQueue alloc] init];

NSBlockOperation *a1 = [[NSBlockOperation alloc] init];

NSBlockOperation *a2 = [[NSBlockOperation alloc] init];

[a1 addExecutionBlock:^{
    NSLog(@"a1");
    
    NSOperationQueue *queue2 = [[NSOperationQueue alloc] init];
    
    NSBlockOperation *b1 = [[NSBlockOperation alloc] init];
    
    NSBlockOperation *b2 = [[NSBlockOperation alloc] init];
    
    [b1 addExecutionBlock:^{
        NSLog(@"b1");
    }];
    
    [b2 addExecutionBlock:^{
        NSLog(@"b2");
    }];

    [a2 addDependency:b2]; // makes this inner queue finish first
    
    [b2 addDependency:b1];
    
    [queue2 addOperations:@[b1, b2] waitUntilFinished:NO];
    
}];

[a2 addExecutionBlock:^{
    NSLog(@"a2");
}];

[a2 addDependency:a1];

[queue1 addOperations:@[a1, a2] waitUntilFinished:NO];
产出:

2017-01-08 00:27:03.019497 OpTest[26141:36238589] a1
2017-01-08 00:27:03.019621 OpTest[26141:36238621] b1
2017-01-08 00:27:03.019721 OpTest[26141:36238589] b2
2017-01-08 00:27:03.019773 OpTest[26141:36238621] a2
如您所见,
[a2 addDependency:b2]
行允许操作子队列在主队列中完成