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

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

2014-09-18 09:33 495 查看
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数据而不用重新请求网络下载数据。每个request的cache策略是由request的cachePolicy
属性来控制的.以下是一些常用的cache策略和它们对应的意义:
ASIUseDefaultCachePolicy
默认的cache
策略。请勿将这一项与其他项结合使用。当你设置一个request使用cache,它会使用cache的defaultCachePolicy.
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其他的用法会持续更新,敬请期待!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: