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