targetc 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 ответа

Решение

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

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

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

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

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

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

Для получения дополнительной информации прочитайте Справочник по классу NSURLSession Apple и Руководство по программированию сеанса URL

НТН

Его довольно простое использование.

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];
Другие вопросы по тегам