我正在使用ASIHttpRequests
一个ASINetworkQueue
iphone 应用程序来检索一些 100k XML 文件和许多来自网络服务的缩略图。我想以NSURLCache
. ASI 似乎不支持缓存,我查看了代码,它下降到 C 来创建请求,因此插入NSURLCache
层似乎很棘手。
实现这一点的最佳方法是什么?
我正在使用ASIHttpRequests
一个ASINetworkQueue
iphone 应用程序来检索一些 100k XML 文件和许多来自网络服务的缩略图。我想以NSURLCache
. ASI 似乎不支持缓存,我查看了代码,它下降到 C 来创建请求,因此插入NSURLCache
层似乎很棘手。
实现这一点的最佳方法是什么?
ASIHTTPRequest 现在支持缓存 - 查看 ASIownloadCache 即。
[ASIHTTPRequest setDefaultCache:[ASIDownloadCache sharedCache]]
任何询问他们如何直接使用 ASIHTTPRequest 执行此操作的人可能会对添加对此功能的支持作为选项的代码分支感兴趣。
您可以在进入 ASI 代码之前提供自己的缓存。
将您的 ASI 代码包装在具有方法的类中:
-(NSString *)getContentFor:(NSURL *)url
该方法首先检查内部 NSDictionary 以查看它是否具有指定 url 的键。如果是,则返回与密钥一起存储的对象。
如果没有,它会执行正常的 ASIRequest。当从服务器接收到请求时,它会将其作为字符串存储在您的字典中,并带有 url 的键。
当然,您需要小心处理异步请求和旧请求的过期。
NSURLConnection has support for caching in the style of NSURLCache, and it does a lot of work for you behind the scenes. It even has a nice delegate method that will allow you to manipulate the cachedResponse:
- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse
试试这个,它对我有用。
__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:^{