2014-11-02 4 views
1

Я ищу шаблон, позволяющий обрабатывать 2 потока (NSOperations) одновременно и возвращаться только после того, как они завершены. Чтобы усложнить это, мне нужна очередь этих двойных операций.Union of 2 Объекты NSOperation

Итак, я думал, что NSOperation содержит NSOperationQueue для обработки обоих. Тогда очередь NSOperation будет выполнять оба одновременно, предупредить меня, когда очередь пуста, и мы можем продолжать свой путь.

Ищет мысли вокруг этого или лучший способ выполнить эту задачу/подводные камни выше.

Заранее благодарен!

Роб

ответ

1

Вы можете использовать поддержку зависимостей NSOperation «s, чтобы справиться с этим. В основном вы создаете третью операцию, которая запускает код, который вы хотите запустить, когда первые две операции завершены, а затем добавить две первые операции в качестве зависимостей к третьей операции и добавьте их в очередь:

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 добавляется в очередь первым, это запустить последний из-за зависимостей она имеет на op1 и op2.

+0

Точно, что я искал !!!! –

Смежные вопросы