objectivec NSURLSessionDownloadTask

objectivec NSURLSessionDownloadTask

我在这里查看了这段代码,

https://www.raywenderlich.com/67081/cookbook-using-nsurlsession

NSURLSessionDownloadTask *downloadPhotoTask = [[NSURLSession sharedSession]
downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
UIImage *downloadedImage = [UIImage imageWithData:
[NSData dataWithContentsOfURL:location]];
}];

我希望这段代码连接到服务器两次,所以图片加载缓慢。我只想知道如何使用 NSURLSessionDownloadTask 通过只点击一次服务器来下载图像。

使用网络非常简单..

AFHTTPRequestOperation *requestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest];
requestOperation.responseSerializer = [AFImageResponseSerializer serializer];
[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Response: %@", responseObject);
    _imageView.image = responseObject;

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Image error: %@", error);
}];
[requestOperation start];

I hope this code connects to the server two times, so the images are downloading slow.

您显示的代码没有连接到服务器并下载两次,但很容易看出为什么它看起来是这样做的。

因此,如果您正在寻找下载速度缓慢的原因,并认为这可能是由于双重下载造成的,那么事实并非如此。

如果您只是误解了代码,这里是其运作方式的概述:

  • 该代码是一个下载任务。这样的任务会下载一个 URL 并将其内容存储到一个临时文件中。
  • 下载任务完成后,它会调用其完成处理程序,将本地临时文件的URL传递给它(不是 原来的遥控器URL).
  • 完成处理程序使用 dataWithContentsOfURL: 将本地文件的内容读入 NSData 对象。该方法也可用于读取远程文件 URL,这就是为什么快速查看可能会导致有人认为这是重复下载,但事实并非如此 - 它正在读取本地文件。

您可能会问为什么使用临时文件而不是将 URL 内容直接作为 NSData 对象传送?答案是可以使用 数据任务,您需要研究文档以了解下载任务与数据任务的优缺点。

有关更多详细信息,请阅读 Apple 的 NSURLSession Class Reference and URL Session Programming Guide

HTH