iOS – 连接asynchronous的基于块的操作

你将如何执行N个asynchronous操作,例如networking调用,处理完成块操作以及没有委托/通知?

鉴于N这样的方法:

- (void)methodNWithCompletion:(void (^)(Result *))completion { Operation *operation = [Operation new]; // ... // Asynchronous operation performed here // ... return; } 

一个简单的解决scheme是调用前一个完成块中的每个操作:

 [self method1WithCompletion:^(Result *result) { // ... [self method2WithCompletion:^(Result *result) { // ... [self method3WithCompletion:^(Result *result) { // ... [self method4WithCompletion:^(Result *result) { NSLog(@"All done"); } } } } 

但我正在寻找一个更优雅和可重用的解决scheme,更容易编写和维护(没有多less缩进块)。

非常感谢,DAN

这一切都取决于你想要做什么。 许多function强大的复杂工具在您的处置。 你可以使用这样的东西:

  • 串行队列(如果你想完成块顺序运行)

  • 并发队列(如果你不关心完成块是同时执行还是按照什么顺序执行)

  • 派遣小组(如果在所有完成块完成之后你想做的事情)

  • Operation and OperationQueue(如果你想build立networking操作的依赖顺序 – 尤其是关于这个主题的WWDC 2015video)