【iOS】内存缓存

使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行。有时候我们需要将远程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:验证本地数据与远程数据是否相同,如果不同则下载远程数据,否则使用本地数据。


NSURLCache还提供了很多方法,来方便我们实现应用程序的缓存机制。下面我通过一个例子来说明,这个例子减少我们对同一个url多次请求。看下面代码:


   
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 ];
    }
    
#pragma mark --- 在下面进行数据请求
    /* 创建 NSURLConnection*/
    NSURLConnection *newConnection =
    [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];



NSURLRequestCachePolicy 缓存策略

1> NSURLRequestUseProtocolCachePolicy = 0, 默认的缓存策略, 如果缓存不存在,直接从服务端获取。如果缓存存在,会根据response中的Cache-Control字段判断下一步操作,如: Cache-Control字段为must-revalidata, 则询问服务端该数据是否有更新,无更新的话直接返回给用户缓存数据,若已更新,则请求服务端.

2> NSURLRequestReloadIgnoringLocalCacheData = 1, 忽略本地缓存数据,直接请求服务端.

3> NSURLRequestIgnoringLocalAndRemoteCacheData = 4, 忽略本地缓存,代理服务器以及其他中介,直接请求源服务端.

4> NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData

5> NSURLRequestReturnCacheDataElseLoad = 2,  有缓存就使用,不管其有效性( 即忽略Cache-Control 字段),  无则请求服务端.

6> NSURLRequestReturnCacheDataDontLoad = 3,  死活加载本地缓存没有就失败. ( 确定当前无网络时使用)

7> NSURLRequestReloadRevalidatingCacheData = 5, 缓存数据必须得得到服务端确认有效才使用(貌似是NSURLRequestUseProtocolCachePolicy中的一种情况)

Tips: URL Loading System默认只支持如下5中协议: 其中只有 http://和https://才有缓存策略.
(1) http://
(2) https://
(3) ftp://
(4) file://
(5) data://
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值