NSData dataWithContentsOfURL кеш - PullRequest
       10

NSData dataWithContentsOfURL кеш

9 голосов
/ 23 августа 2010

NSData + dataWithContentsOfURL имеет какой-либо вид кэширования по умолчанию? Кто-нибудь экспериментировал с какими-то проблемами, используя этот метод, какой самый эффективный способ получения данных из Интернета?

Ответы [ 5 ]

8 голосов
/ 23 августа 2010

Используйте ASIHTTPRequest.Это сторонняя клиентская библиотека HTTP, которая делает сетевое взаимодействие НАМНОГО проще и имеет очень хорошие функции кэширования.

ОБНОВЛЕНИЕ: только что получил отрицательный ответ на этот ответ, который является хорошим напоминанием, чтобы вернуться и обновить,Лот изменился с августа 10 года.В частности: ASIHTTPRequest теперь устарела, и его автор призывает людей использовать что-то еще.AFNetworking кажется популярным выбором.

5 голосов
/ 12 мая 2014

Похоже, что на iPhone5s по умолчанию используется политика кэширования (отмена iPhone5 и более ранних версий).

Вы можете обработать с помощью параметра options политику кэширования для NSData.Например, если вы хотите избежать кэширования, можно использовать следующий фрагмент:

[[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url] options:NSDataReadingUncached error:nil];
5 голосов
/ 26 июля 2012

Лучше всего использовать NSURLConnection. Заданный вами NSURLRequest может быть настроен на кэширование так, как вы хотите, но по умолчанию он просто выполняет стандартное кэширование HTTP-ресурсов, которые имеют соответствующие заголовки в своем ответе.

Вот что я делаю:

NSData *data = [NSURLConnection sendSynchronousRequest:
                [NSURLRequest requestWithURL:url]
                                     returningResponse:nil
                                                 error:&error];

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

3 голосов
/ 23 августа 2010

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

Какие типы данных вы хотите получить

UIImage: да, я думаю, вы должны использовать NSData

Видео: вы должны использовать MPMoviePlayerController для потоковой передачи

Текст: я думаю, что вы можете сделать обычный NSUrlConnection .Он также имеет асинхронный, синхронный и кеширующий

0 голосов
/ 18 апреля 2013

Если вам нужно просто загрузить изображение с URL-адреса, не пытайтесь использовать какие-либо библиотеки, достаточно простого вызова dispatch_async.как это:

dispatch_async( dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 ), ^(void)
{
    NSData * data = [NSData dataWithContentsOfURL:imageUrl];
    dispatch_async( dispatch_get_main_queue(), ^(void){
        self.image = [UIImage imageWithData:data];
    });
});
...