使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行。有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求。
内存缓存我们可以使用sdk中的NSURLCache类。NSURLRequest需要一个缓存参数来说明它请求的url何如缓存数据的,我们先看下它的CachePolicy类型。
1、NSURLRequestUseProtocolCachePolicy NSURLRequest默认的cache policy,使用Protocol协议定义。
2、NSURLRequestReloadIgnoringCacheData 忽略缓存直接从原始地址下载。
3、NSURLRequestReturnCacheDataElseLoad 只有在cache中不存在data时才从原始地址下载。
4、NSURLRequestReturnCacheDataDontLoad 只使用cache数据,如果不存在cache,请求失败;用于没有建立网络连接离线模式;
5、NSURLRequestReloadIgnoringLocalAndRemoteCacheData:忽略本地和远程的缓存数据,直接从原始地址下载,与NSURLRequestReloadIgnoringCacheData类似。
6NSURLRequestReloadRevalidatingCacheData:验证本地数据与远程数据是否相同,如果不同则下载远程数据,否则使用本地数据。
NSString *paramURLAsString= @"http://www.baidu.com/" ;
if ([paramURLAsString length ] == 0 ){
NSLog ( @"Nil or empty URL is given" );
return ;
}
NSURLCache *urlCache = [ NSURLCache sharedURLCache ];
/* 设置缓存的大小为 1M*/
[urlCache setMemoryCapacity : 1 * 1024 * 1024 ];
// 创建一个 nsurl
NSURL *url = [ NSURL URLWithString :paramURLAsString];
// 创建一个请求
NSMutableURLRequest *request =
[ NSMutableURLRequest
requestWithURL :url
cachePolicy : NSURLRequestUseProtocolCachePolicy
timeoutInterval : 60.0f ];
// 从请求中获取缓存输出
NSCachedURLResponse *response =
[urlCache cachedResponseForRequest :request];
// 判断是否有缓存
if (response != nil ){
NSLog ( @" 如果有缓存输出,从缓存中获取数据 " );
[request setCachePolicy : NSURLRequestReturnCacheDataDontLoad ];
}