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)