objectivec NSURLSessionDownloadTask

时间:2016-05-19 14:07:14

标签: ios objective-c 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通过只打一次服务器来下载图像。

2 个答案:

答案 0 :(得分:0)

使用afnetworking非常简单..

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];

答案 1 :(得分:0)

  

我希望此代码连接到服务器两次,因此图像下载速度很慢。

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

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

如果您误解了代码,请在此处概述其运作方式:

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

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

有关详细信息,请阅读Apple的NSURLSession Class ReferenceURL Session Programming Guide

HTH