使用AFNetworking 2高效下载大量图像(1500+)

时间:2015-04-04 16:52:27

标签: ios objective-c grand-central-dispatch batch-processing afnetworking-2

我正在构建一个可下载大量图片的应用,有时会根据用户的要求提供1500-5000张图片。为此,我使用的是AFNetworking 2。起初,我只是循环遍历所有网址,然后为每个网址发出请求。

for (NSString *url in urls) {
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    AFHTTPRequestOperation *requestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    requestOperation.responseSerializer = [AFImageResponseSerializer serializer];
    [requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        completion(responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        failure(error);
    }];
    [requestOperation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
        double percentDone = (double)totalBytesRead / (double)totalBytesExpectedToRead;
        progress(percentDone);
    }];
    [requestOperation start];
}

但是,在我达到大约900次下载/请求后,我会开始收到以下错误:

The request timed out

我假设此错误直接来自AFNetworking

在没有超时的情况下制作大量下载请求的最佳和最有效的方法是什么?我应该使用dispatch_group批量处理请求outlined here吗?

或者,我应该使用一次下载一个图像的递归方法,只在第一个请求完成后才开始下一个请求吗?

1 个答案:

答案 0 :(得分:1)

试试这个

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setTimeoutInterval:600];  /* 10 minutes */

但如果您只是下载图像存档然后解压缩它将是最佳解决方案。