美文网首页
iOS For循环执行AFNetworking请求

iOS For循环执行AFNetworking请求

作者: 你说明哥我说哎 | 来源:发表于2017-12-19 13:49 被阅读755次
    屏幕快照 2017-12-19 下午1.46.25.png
    需求:如下操作打印的文档为
     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(@"结束");
        });
    

    相关文章

      网友评论

          本文标题:iOS For循环执行AFNetworking请求

          本文链接:https://www.haomeiwen.com/subject/gebbwxtx.html