使用 AFNetworking 2 高效下载大量图像(1500+)
Downloading a large number of images (1500+) efficiently with AFNetworking 2
我正在构建一个可下载大量图像的应用程序,有时会下载 1500-5000 张图像,具体取决于用户的请求。为此,我使用 AFNetworking 2
。起初,我只是循环遍历我所有的 URL,然后为每个 URL 发出请求。
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 之后 downloads/requests 我会开始收到以下错误:
The request timed out
我假设这个错误直接来自 AFNetworking
。
在不超时的情况下进行大量这样的下载请求的最佳和最有效的方法是什么?我应该使用 dispatch_group
将请求批处理为 outlined here 吗?
或者,我是否应该使用递归方法一次下载一张图片,并且只有在第一个请求完成后才开始下一个请求?
试试这个
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setTimeoutInterval:600]; /* 10 minutes */
但如果您只下载图像存档然后解压缩,那将是最好的解决方案。
我正在构建一个可下载大量图像的应用程序,有时会下载 1500-5000 张图像,具体取决于用户的请求。为此,我使用 AFNetworking 2
。起初,我只是循环遍历我所有的 URL,然后为每个 URL 发出请求。
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 之后 downloads/requests 我会开始收到以下错误:
The request timed out
我假设这个错误直接来自 AFNetworking
。
在不超时的情况下进行大量这样的下载请求的最佳和最有效的方法是什么?我应该使用 dispatch_group
将请求批处理为 outlined here 吗?
或者,我是否应该使用递归方法一次下载一张图片,并且只有在第一个请求完成后才开始下一个请求?
试试这个
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setTimeoutInterval:600]; /* 10 minutes */
但如果您只下载图像存档然后解压缩,那将是最好的解决方案。