2016-05-19 11 views
0

Я рассматривал этот код здесь,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 для загрузки изображения, нажав на сервер только один раз.

+0

Этот код не будет подключаться к серверу дважды. – dan

ответ

0

Я надеюсь, что этот код подключается к серверу в два раза, поэтому изображения загрузки медленно.

код вы покажете ли не подключиться к серверу и загрузить в два раза, хотя это легко понять, почему это может показаться, чтобы сделать это.

Итак, если вы ищете причину, по которой ваша загрузка идет медленно, и думаю, что это может быть связано с двойной загрузкой, то это не так.

Если вы просто не поняли код здесь есть схема того, как она работает:

  • Код является загрузки задача. Такая задача загружает URL-адрес и сохраняет его содержимое во временном файле.
  • Когда задача загрузки завершена, он вызывает обработчик завершения, передавая ему URL-адрес локального временного файла (не).
  • Обработчик завершения считывает содержимое локального файла в объект NSData с использованием dataWithContentsOfURL:. Этот метод также можно использовать для чтения удаленного URL-адреса, поэтому быстрый взгляд может привести к тому, что кто-то подумает, что это повторение загрузки, но это не так - это чтение локального файла.

Возможно, вы спросите, почему используется временный файл, а не содержимое URL-адреса, которое доставляется непосредственно в качестве объекта NSData? Ответ заключается в том, что можно использовать задачу данных , вам нужно будет изучить документацию по задачам загрузки и передачи данных.

Подробнее см. Apple's NSURLSession Class Reference и URL Session Programming Guide.

HTH

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

спасибо vaibhav, я новичок в iOS, и я хочу знать, можно ли это сделать, без использования AFNetworking –

+0

@Sujananth вы не можете быть настолько жесткими в программировании, это мой личный опыт использования ** afnetworking * *, который быстрее, чем другие, без какой-либо путаницы. ** все еще вы хотите пойти с вашей проблемой. Я настоятельно рекомендую вам прочитать, прежде чем внедрять какой-либо код ** .. – vaibhav