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