我在iPhone应用程序中使用ASIHttpRequests
和ASINetworkQueue
从Web服务检索一些100k XML文件和大量缩略图。我想以NSURLCache
的样式缓存请求。 ASI似乎并不支持缓存,并且我查看了代码,并且它下降到C来创建请求,因此插入NSURLCache
层似乎很棘手。如何将HTTP请求缓存添加到使用ASIHTTPRequests的应用程序?
实现此目的的最佳方式是什么?
我在iPhone应用程序中使用ASIHttpRequests
和ASINetworkQueue
从Web服务检索一些100k XML文件和大量缩略图。我想以NSURLCache
的样式缓存请求。 ASI似乎并不支持缓存,并且我查看了代码,并且它下降到C来创建请求,因此插入NSURLCache
层似乎很棘手。如何将HTTP请求缓存添加到使用ASIHTTPRequests的应用程序?
实现此目的的最佳方式是什么?
NSURLConnection支持NSURLCache风格的缓存,并且在幕后为您做了很多工作。它甚至有一个很好的委托方法,让您操作cachedResponse:
- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse
你可以在下降到ASI码之前提供自己的高速缓存。
裹在有方法的类的ASI码:
-(NSString *)getContentFor:(NSURL *)url
该方法首先检查内部的NSDictionary,看它是否有存在的密钥对指定的URL。如果是,则它返回与密钥一起存储的对象。
如果没有,它将执行正常的ASIRequest。当从服务器收到请求时,它将它作为字符串存储在字典中,并使用url的键。
当然,您需要小心处理异步请求并过期旧请求。
任何人询问他们如何使用ASIHTTPRequest直接执行此操作可能会对此代码的branch感兴趣,因为这些代码增加了对此功能的支持作为选项。
ASIHTTPRequest现在支持缓存 - 检查ASIDownloadCache即。
[ASIHTTPRequest setDefaultCache:[ASIDownloadCache sharedCache]]
试试这个,它适用于我。
__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:^{