Как я могу добавить кеширование HTTP-запросов в приложение, используя ASIHTTPRequests? - PullRequest
7 голосов
/ 06 декабря 2009

Я использую ASIHttpRequests и ASINetworkQueue в приложении для iphone, чтобы получить около 100 тыс. XML-файлов и множество миниатюр из веб-службы. Я бы хотел кешировать запросы в стиле NSURLCache. ASI, похоже, не поддерживает кеширование как есть, и я посмотрел на код, и он падает до C для создания запросов, поэтому вставка слоя NSURLCache показалась сложной.

Какой лучший способ реализовать это?

Ответы [ 5 ]

3 голосов
/ 13 июля 2011

ASIHTTPRequest теперь поддерживает кеширование - посмотрите ASIDownloadCache, т.е.

[ASIHTTPRequest setDefaultCache:[ASIDownloadCache sharedCache]]
1 голос
/ 13 мая 2010

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

Оберните ваш код ASI в класс, у которого есть метод:

-(NSString *)getContentFor:(NSURL *)url

Этот метод сначала проверяет внутренний NSDictionary, чтобы увидеть, есть ли у него ключ для указанного URL. Если это так, он возвращает объект, сохраненный с ключом.

Если это не так, он выполняет обычный ASIRequest. Когда запрос получен с сервера, он сохраняет его в виде строки в вашем словаре с ключом URL.

Конечно, вам нужно будет осторожно обрабатывать асинхронные запросы и устаревание старых запросов.

1 голос
/ 16 мая 2010

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

0 голосов
/ 08 марта 2012

попробуйте это, у меня это работает.

__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
    [request setDownloadCache:[ASIDownloadCache sharedCache]];
    [request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
   [request setCachePolicy:ASIAskServerIfModifiedWhenStaleCachePolicy];
   [request setSecondsToCache:60*60*24]; // Cache for 24 hrs
    [request setDelegate:self]; // A delegate must be specified
    [request setCompletionBlock:^{
0 голосов
/ 12 марта 2010

NSURLConnection имеет поддержку для кэширования в стиле NSURLCache, и он делает большую работу для вас за кулисами. У него даже есть хороший метод делегата, который позволит вам манипулировать cachedResponse:

- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse

...