iOS 本地缓存简述

以前自己做项目 都是网络请求,没有研究过本地缓存,今天在网上找了一下资料,demo试了一下,其实很简单,现在做一下简单的记录:

iOS 5之前:只支持内存缓存。从iOS 5开始:同时支持内存缓存和硬盘缓存

 

代码(仅仅是网络缓存的代码部分):
//网络请求数据的类方法

+(void)sloveDataFromUrlString:(NSString *)aString dataBlock:(DataBlock)aBlock
{

          任何通过NSURLConnection 加载的请求都会在 NSURLCache处理,因为AFNetworking使用了     NSURLConnection,说以也会被处理。

 

当完成数据的请求后,缓存的数据被相应地保存在本地(沙盒目录为Library/Cache/<boundleId>目录下,每一个请求都会生成一个文件夹,保存的文件为NSData 文件。)当下次同样的请求时,直接从缓存中获取即可。(因此网络缓存减少了与服务器的负担,并提高应用程序的体验效果)。

 

 

 

@第一种初始化NSURLCache 的方法
    NSURLCache * cache = [NSURLCache sharedURLCache];//NSURLCache 是个单例类(系统自带的)
//
//    NSString * librarystring = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)[0];
//    NSLog( @"librarystring %@",librarystring);//获得沙盒library的地址(系统为每个app都分配了一个封闭的内存空间,只有该app才能访问)
    
    NSString * cachestring = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
    NSLog(@"cachestring %@",cachestring);//获得沙盒cache的地址 (在linarary下面的文件夹,用来缓存文件)  


//    [cache setMemoryCapacity:5 * 1024 * 1024];//设置内存缓存的大小5M(默认是512K,字节为单位)
//    
//    [cache setDiskCapacity:10 * 1024 * 1024];//磁盘的缓存大小(默认是10M,硬盘缓存位置是     沙盒/Library/Caches )
    
    
@第二种初始化NSURLCache 的方法
//    NSURLCache * cache = [[NSURLCache alloc] initWithMemoryCapacity:5 *1024 * 1024
//                                                      diskCapacity:25 * 1024 * 1024
//                                                          diskPath:nil];//
    
    
//    [NSURLCache setSharedURLCache:cache];

//

    
    NSURL *url=[NSURL URLWithString:aString];
   
    
    NSLog(@"%lu",(unsigned long)cache.diskCapacity);//如果没有上面的设置内存缓存就是默认的512K
    
    NSLog(@"%lu",(unsigned long)cache.memoryCapacity);//如果没有上面的设置内存缓存就是默认的10M
    

NSMutableURLRequest  * request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:5.0f];
    

 

5.iOS对NSURLRequest提供了7种缓存策略:(实际上能用的只有4种)

 

NSURLRequestUseProtocolCachePolicy // 默认的缓存策略(取决于协议)

 

NSURLRequestReloadIgnoringLocalCacheData // 忽略缓存,重新请求

 

NSURLRequestReloadIgnoringLocalAndRemoteCacheData // 未实现

 

NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData // 忽略缓存,重新请求

 

NSURLRequestReturnCacheDataElseLoad// 有缓存就用缓存,没有缓存就重新请求

 

NSURLRequestReturnCacheDataDontLoad// 有缓存就用缓存,没有缓存就不发请求,当做请求出错处理(用于离线模式)

 

NSURLRequestReloadRevalidatingCacheData // 未实现


  
NSCachedURLResponse * response = [cache cachedResponseForRequest:request];

    if (response != nil) {
        
        NSLog(@"有缓存");
 
    }else{
        
        [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
            
            aBlock(data);
            
        }];

        
    }

 

http://blog.sina.com.cn/s/blog_71ce775e0101elue.html

 

posted @ 2016-01-21 14:48  *宁宁  阅读(263)  评论(0编辑  收藏  举报