IOS网络通信之ASIHttpRequest的使用(二)

IOS网络通信

之ASIHttpRequest的使用(二)

上一篇博文介绍了ASIHttpRequest的一些最基本的用法,这里再继续介绍一些ASIHttpRequest的其他使用.

 

ASI还可以缓存数据,如果设置了缓存,则当下次请求时,就可以直接使用本地的缓存数据而不用再请求网络(注意:只有GET请求才可以缓存数据).

以下是从网络请求一张图片(可以设置缓存保存在本地)的一个demo供大家参考:

首先导入#import "ASIDownloadCache.h"头文件

NSString *urlStr = @"http://pic1.win4000.com/pic/4/3f/4124407336.jpg";
//构建requst对象
ASIHTTPRequest *request = [ASIHTTPRequestrequestWithURL:[NSURLURLWithString:urlStr]];
//获取本地缓存的路径
NSString *cachePath = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents"];
//创建缓存对象
ASIDownloadCache *cache = [[ASIDownloadCache alloc]init];
//设置缓存路径
[cachesetStoragePath:cachePath];
//设置缓存策略(只有当没有缓存时才缓存数据)
[cachesetDefaultCachePolicy:ASIOnlyLoadIfNotCachedCachePolicy];
//设置缓存的生命周期ASICachePermanentlyCacheStoragePolicy持久缓存  程序下次启动时  缓存任然在
//ASICacheForSessionDurationCacheStoragePolicy清除上次会话请求的本地缓存数据
request.cacheStoragePolicy = ASICacheForSessionDurationCacheStoragePolicy;
[requestsetDownloadCache:cache];
//开始异步请求网络
[requeststartAsynchronous];

 

判断数据是否来自缓存:

//设置请求完成后调用的block
[requestsetCompletionBlock:^{
self.image = [UIImage imageWithData:request.responseData];
//判断返回的数据是否来自本地缓存
if (request.didUseCachedResponse){
NSLog(@"使用缓存数据");
}else
{
NSLog(@"使用网络数据");
}
}];


大家可能对cache策略和cache的生命周期还不太理解, cache策略是你控制cache中信息的主要方法,控制何时使用cache数据而不用重新请求网络下载数据。每个requestcache策略是由requestcachePolicy 属性来控制的.以下是一些常用的cache策略和它们对应的意义:

ASIUseDefaultCachePolicy

默认的cache 策略。请勿将这一项与其他项结合使用。当你设置一个request使用cache,它会使用cachedefaultCachePolicy. ASIDownloadCache的默认cache策略是‘ASIAskServerIfModifiedWhenStaleCachePolicy’. 

ASIDoNotReadFromCacheCachePolicy

使用这一项,request将不会从cache中读取数据

ASIDoNotWriteToCacheCachePolicy

使用这一项,request将不会把数据存入cache

ASIAskServerIfModifiedWhenStaleCachePolicy

这是ASIDownloadCaches的默认cache策略。使用这个策略时,request会先查看cache中是否有可用的缓存数据。如果没有,request会像普通request那样工作。

如果有缓存数据并且缓存数据没有过期,那么request会使用缓存的数据,而且不会向服务器通信。如果缓存数据过期了,request会先进行GET请求来想服务器询问数据是否有新的版本。如果服务器说缓存的数据就是当前版本,那么缓存数据将被使用,不会下载新数据。在这种情况下,cache的有效期将被设定为服务器端提供的新的有效期。如果服务器提供更新的内容,那么新内容会被下载,并且新的数据以及它的有效期将被写入cache

ASIAskServerIfModifiedCachePolicy

这一项与ASIAskServerIfModifiedWhenStaleCachePolicy相同,除了一点:request将会每次都询问服务器端数据是否有更新。

ASIOnlyLoadIfNotCachedCachePolicy

使用这一项,cache数据将一直被使用,无视过期时间

ASIDontLoadCachePolicy

使用这一项时,只有当响应数据有缓存时,request才会成功。如果一个request没有缓存的响应数据,那么这个request将会停止,并且不会有错误设置在request上。

ASIFallbackToCacheIfLoadFailsCachePolicy

当使用这一项时,当request失败时,request会回头请求cache数据。如果请求失败后,request使用的cache数据,那么这个request会成功(没有错误)。你通常会将这一项与其他项结合使用,因为它适用于指定当发生错误时request的行为。

 

Cache的生命周期是定义一个cache可以存储相应的数据多久。ASIHTTPRequest目前支持两种存储策略:

(1)ASICacheForSessionDurationCacheStoragePolicy是默认值。数据只会在会话期间被存储,在第一次使用cache时,或者在调用 [ASIHTTPRequest clearSession]时,数据会被清除。

(2)ASICachePermanentlyCacheStoragePolicy,缓存数据会被永久存储。

 

 

除了以上用法,ASIDownloadCache还有一个类方法,可以让不同的request共享同一个cache,代码如下:

ASIHTTPRequest *request= [[ASIHTTPRequest alloc]initWithURL:url];
[request setDownloadCache:[ASIDownloadCache sharedCache]];


 

以上是ASI缓存的使用方法,关于ASI其他的用法会持续更新,敬请期待!

你可能感兴趣的:(ios,cache,ASIHTTPRequest,第三方框架,网络通信)