GCD和块是这么好,方便。 但是,当我爱上了它,我发现,一些糟糕的事情发生。 看看下面这些代码:
[self functionA:^(BOOL success) {
if (success) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
[self functionB:^(NSError *error) {
if (error != nil) {
dispatch_async(dispatch_get_main_queue(), ^(void) {
[self functionC:^(id result) {
if (result) {
[self functionD:^(BOOL success) {
if (success) {
[self DoSomething];
}
}];
}
}];
});
}
}];
});
}
}];
疯? 是。 我在这麻烦了。
是否有人有任何避免这样的嵌套块的经验吗?
编辑:
多谢你们。 没错,我们有更优雅的方式来做到这一点。 如:
- 声明块预
- 让子块作为独立的功能
但我想到的是一个通用的解决方案。 也许是这样的:(伪下面的代码)
functionA.flat.success = [self functionB];
functionB.flat.isntnil = [self functionC];
functionB.flat.error = {};
functionC.flat.isntnil = [self functionD];
[flat call:functionA];