如何使用ASIHTTPRequests将HTTP请求缓存添加到应用程序?

时间:2009-12-05 23:20:19

标签: iphone ios asihttprequest

我在iphone应用中使用ASIHttpRequestsASINetworkQueue来检索来自网络服务的大量100k XML文件和大量缩略图。我想以NSURLCache的方式缓存请求。 ASI似乎不支持缓存,我查看代码并将其放到C来创建请求,因此插入NSURLCache层似乎很棘手。

实施此方法的最佳方式是什么?

5 个答案:

答案 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:^{