需求:如下操作打印的文档为
NSLog(@"开始");
for (NSInteger i = 0; i < 5; i++) {
[RequestUtil requestFavoriteGroup:appDelegate.userInfo.uid andBlock:^(NSArray *modelArr, NSError *error) {
NSLog(@"第一层的循环请求,i=%ld",i);
for (NSInteger j = 0; j < 3; j++) {
[RequestUtil requestFavoriteGroup:appDelegate.userInfo.uid andBlock:^(NSArray *modelArr, NSError *error) {
NSLog(@"第二层的循环请求,i=%ld,j=%ld",i,j);
}];
}
}];
}
NSLog(@"结束");
开始
第一层的循环请求,i=0
第二层的循环请求,i=0,j=0
第二层的循环请求,i=0,j=1
第二层的循环请求,i=0,j=2
第一层的循环请求,i=1
第二层的循环请求,i=1,j=0
第二层的循环请求,i=1,j=1
第二层的循环请求,i=1,j=2
第一层的循环请求,i=2
第二层的循环请求,i=2,j=0
第二层的循环请求,i=2,j=1
第二层的循环请求,i=2,j=2
第一层的循环请求,i=3
第二层的循环请求,i=3,j=0
第二层的循环请求,i=3,j=1
第二层的循环请求,i=3,j=2
第一层的循环请求,i=4
第二层的循环请求,i=4,j=0
第二层的循环请求,i=4,j=1
第二层的循环请求,i=4,j=2
结束
一种写法:
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSLog(@"开始");
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
for (NSInteger i = 0; i < 5; i++) {
[RequestUtil requestFavoriteGroup:@"8130d4174c2353af" andBlock:^(NSArray *modelArr, NSError *error) {
NSLog(@"第一层的循环请求,i=%ld",i);
dispatch_async(dispatch_get_global_queue(0, 0), ^{
dispatch_semaphore_t sema2 = dispatch_semaphore_create(0);
for (NSInteger j = 0; j < 3; j++) {
[RequestUtil requestFavoriteGroup:appDelegate.userInfo.uid andBlock:^(NSArray *modelArr, NSError *error) {
NSLog(@"第二层的循环请求,i=%ld,j=%ld",i,j);
dispatch_semaphore_signal(sema2);
}];
dispatch_semaphore_wait(sema2, DISPATCH_TIME_FOREVER);
}
dispatch_semaphore_signal(sema);
});
}];
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
}
NSLog(@"结束");
});