您的位置:首页 > 理论基础 > 计算机网络

ASIHTTPRequest缓存详解

2013-04-26 14:41 316 查看
使用下载缓存:

注明本文所写内容仅仅适用于v1.8版本。

一般来说,有效的缓存策略选项是各不相同的,所以你可以为一个请求组合使用多种缓存策略。

ASIHTTPRequest可以自动地存储已经下载的数据已被后来使用,这个功能在以下应用场景下将显得非常有用:

1.你想在无网络环境下访问之前已经访问过的数据,很明显在这种情况下你无法再次加载这些数据;

2.你不想重复加载相同数据,增加不必要的网络开销;

3.有一些永远不变的数据你只想加载一次;

在早先的版本中(看到这句我就放心了,别人没有说错只是版本不同罢了,这可以解释冲突存在的原因),处理以上场景中问题,意味着我们要自己动手解决(大神说要自己判断的,明显他用的老版本),也就是说你要利用本地存储机制自己写代码来解决场景中的问题。

ASIDownloadCache是一个可以通过判断URL(这里有待斟酌,我现在就是这么理解的)用于缓存GET请求的缓存机制。只有满足以下条件的时候才会生效,首先请求必须成功(没有错误发生),而且服务器必须返回状态码200,在v1.8.1版本中状态码301,302,303和307等重定向状态码同样有效。

开启相应缓存非常简单,你只要调用一下方法:

[plain] view
plaincopy

[ASIHTTPRequest setDefaultCache:[ASIDownloadCache sharedCache]];

在这之后,你所有的请求响应都会自动被缓存。如果你不想这样,你可以用一下方法为特定的请求开启缓存机制:

[plain] view
plaincopy

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

[request setDownloadCache:[ASIDownloadCache sharedCache]];

通过上面的方法你可以得到一个单例的AISDownloadCache对象,那么你是不是只能用这个单例的对象呢?答案是否定的,你可以创建多个实例,只要你喜欢。当你自己创建一个 AISDownloadCache 对象时,你必须设置缓存的路径,当然了这个路径必须是一个你拥有写权限的目录,就像这样:

[plain] view
plaincopy

ASIDownloadCache *cache = [[[ASIDownloadCache alloc] init] autorelease];

[cache setStoragePath:@"/Users/ben/Documents/Cached-Downloads"];

//记得retaining你的对象

[self setMyCache:cache];

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

[request setDownloadCahce:[self myCache]];

关于缓存策略的介绍

缓存策略是你控制存储缓存信息的主要手段,缓存信息优先级比重新加载数据要高,会被优先使用。

我们可以通过request的cachePolicy属性来设置缓存策略。缓存策略是独立服务选项,所以你可以为一个请求组合使用多个服务选项,就像下面这样:

[plain] view
plaincopy

[request setCachePolicy:ASIAskServerIfModifiedCachePolicy|AIFallbackToCacheIfLoadFailsCachePolicy];

你可以使用如下的服务选项来设置一个请求的缓存策略:

今天晚上下写到这里,明天还要上班,待续。

把昨天剩下的一点内容补上:

ASIUseDefautlCahcePolicy: 使用默认策略,当你的请求使用该策略的时候将会使用ASIAskServerIfModifiedWhenStaleCachePolicy.注意使用该选项的时候不能和其他选项组合使用。

ASIDoNotReadFromCacheCachePolicy:使用该选项时,请求将不会读取缓存。

ASIDoNoWriteToCacheCachePolicy:使用该选项时,请求将不会将数据存储到缓存。

ASIAskServerIfModifiedWhenStaleCachePolicy:该选项是ASIDownloadCaches的默认选项。使用该选项时,请求首先会查找是不是有一个可用响应存在于缓存中。如果缓存中没有数据,请求就会按正常流程执行。如果缓存中的响应数据没有过期,那么请求对象会使用该数据而不会去请求服务器。如果数据已经过期,请求对象会构造一个带条件的GET请求去服务确认是否有新版本的数据,如果服务器告诉请求对象缓存数据是最新版本,那么缓存数据将会被使用而不会重新加载数据。在这种情况下,缓存的过期时间会更新为从服务器获取的新时间。如果服务器更新了数据,那么这个新数据将会被下载,新的过期时间也会被写入到缓存中。

ASIAskServerIfModifiedCachePolicy:该选项除了每次都要询问服务器是否有新版本的数据以外,其他行为都和ASIAskServerIfModifiedWhenStaleCachePolicy(它是在当前时间时间大于过期时间之后才会询问服务器的)。

ASIOnlyLoadIfNotCachedCachePolicy:当使用该选项的时候,缓存数据只要存在就会一直被使用,即使该数据已经过期。

ASIDontLoadCachePolicy:使用该选项的时候,请求只有在响应数据已经缓存的情况下才会成功。如果请求没有可用的已经缓存的响应数据,请求将会终止,并且不会用错误信息返回给请求对象。

ASIFallbackToCacheIfLoadFailsCachePolicy:当使用该选项时,如果请求失败了那么请求会转而使用缓存数据。并且是成功使用缓存数据后,请求将会是成功状态,不会有任何错误发生。你可以将该选项和其他选项组合使用,该选项将在请求出错时指定一个处理方式的时候非常有用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: