2个NSOperation对象的联合

时间:2014-11-02 00:28:05

标签: nsoperation nsoperationqueue

我正在寻找允许同时处理2个线程(NSOperations)的模式,并且只有在两个线程都完成后才返回。为了使这一点复杂化,我需要这些双重操作的队列。

所以,我的想法是让NSOperation包含一个NSOperationQueue来处理两者。然后NSOperation队列将同时执行两个队列,当队列为空时提醒我,我们可以继续前进。

寻找有关这方面的想法,或者更好的方法来完成上述任务/陷阱。

提前致谢!

罗布

1 个答案:

答案 0 :(得分:1)

您可以使用NSOperation依赖支持来解决此问题。基本上,您创建第三个操作,运行您在前两个操作完成时要运行的代码,然后将前两个操作作为依赖项添加到第三个操作,并将它们全部添加到队列中:

NSOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
    NSLog(@"op1!");
}];

NSOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
    NSLog(@"op2!");
}];

NSOperation *completionOp = [NSBlockOperation blockOperationWithBlock:^{
    NSLog(@"op1 and op2 are complete!");
}];

[completionOp addDependency:op1];
[completionOp addDependency:op2];

NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:completionOp];
[queue addOperation:op1];
[queue addOperation:op2];

哪个输出:

op1!
op2!
op1 and op2 are complete!

请注意,即使首先将completionBlock添加到队列中,由于它在op1op2上的依赖关系,它也会最后运行。