NSBlockOperation can't handle asynchronous operations。
A,B,C是同步執(zhí)行的任務(wù)
用 NSOpertion 和 NSOpertionQueue 處理
NSOperationQueue *queue = [[NSOperationQueue alloc] init]; // 創(chuàng)建3個操作 NSOperation *a = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@”operationA---“);}]; NSOperation *b = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@”operationB---“);}]; NSOperation *c = [NSBlockOperation blockOperationWithBlock:^{ NSLog(@”operationC---“);}]; // 添加依賴 [c addDependency:a]; [c addDependency:b]; // 執(zhí)行操作 [queue addOperation:a]; [queue addOperation:b]; [queue addOperation:c];
A,B,C是異步執(zhí)行的任務(wù),eg.網(wǎng)絡(luò)請求
Dispatch Group 會在整個組的任務(wù)都完成時通知你。這些任務(wù)可以是同
步的,也可以是異步的,即便在不同的隊列也行。
`
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ // 1
__block NSError *error;
dispatch_group_t downloadGroup = dispatch_group_create(); // 2
for (NSInteger i = 0; i < 3; i++) {
NSURL *url;
switch (i) {
case 0:
url = [NSURL URLWithString:kOverlyAttachedGirlfriendURLString];
break;
case 1:
url = [NSURL URLWithString:kSuccessKidURLString];
break;
case 2:
url = [NSURL URLWithString:kLotsOfFacesURLString];
break;
default:
break;
}
dispatch_group_enter(downloadGroup); // 3
Photo *photo = [[Photo alloc] initwithURL:url
withCompletionBlock:^(UIImage *image, NSError *_error) {
if (_error) {
error = _error;
}
dispatch_group_leave(downloadGroup); // 4
}];
[[PhotoManager sharedManager] addPhoto:photo];
}
dispatch_group_wait(downloadGroup, DISPATCH_TIME_FOREVER); // 5
dispatch_async(dispatch_get_main_queue(), ^{ // 6
if (completionBlock) { // 7
completionBlock(error);
}
});
});
`