美文网首页
iOS多个网络请求执行

iOS多个网络请求执行

作者: 奔跑的喔汼 | 来源:发表于2018-01-12 11:14 被阅读115次

1.使用GCD的dispatch_group_t

-(void)Btn{

    NSString *str = @"http://www.jianshu.com/p/6930f335adba";

    NSURL *url = [NSURL URLWithString:str];

    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    NSURLSession *session = [NSURLSession sharedSession];

    dispatch_group_t downloadGroup = dispatch_group_create();

    for(inti=0; i<10; i++) {

        dispatch_group_enter(downloadGroup);

        NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

            NSLog(@"%d---%d",i,i);

            dispatch_group_leave(downloadGroup);

        }];

        [task resume];

    }

    dispatch_group_notify(downloadGroup, dispatch_get_main_queue(), ^{

        NSLog(@"end");

    });

}

2..使用GCD的信号量dispatch_semaphore_t

-(void)Btn{

    NSString *str = @"http://www.jianshu.com/p/6930f335adba";

    NSURL *url = [NSURL URLWithString:str];

    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    NSURLSession *session = [NSURLSession sharedSession];

    dispatch_semaphore_t sem = dispatch_semaphore_create(0);

    for(inti=0; i<10; i++) {

        NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

            NSLog(@"%d---%d",i,i);

            count++;

            if(count==10) {

                dispatch_semaphore_signal(sem);

                count = 0;

            }

        }];

        [task resume];

    }

    dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);

    dispatch_async(dispatch_get_main_queue(), ^{

        NSLog(@"end");

    });

}

3.用GCD信号量实现顺序执行,待所有请求完成后再进行相应操作。

-(void)Btn{

    NSString *str = @"http://www.jianshu.com/p/6930f335adba";

    NSURL *url = [NSURL URLWithString:str];

    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    NSURLSession *session = [NSURLSession sharedSession];

    dispatch_semaphore_t sem = dispatch_semaphore_create(0);

    for(inti=0; i<10; i++) {

        NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

            NSLog(@"%d---%d",i,i);

            dispatch_semaphore_signal(sem);

        }];

        [task resume];

        dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);

    }

    dispatch_async(dispatch_get_main_queue(), ^{

        NSLog(@"end");

    });

}

注:1、2、3均为网络请求执行完后再执行相应操作,但1、2的网络请求为无序,3的请网络请求是按顺序执行。3是最耗时的!!!

相关文章

网友评论

      本文标题:iOS多个网络请求执行

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