zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    [SDOI 2009] HH去散步
    [SDOI 2017] 新生舞会
    【期望 数学】7.6神经衰弱
    初涉2-SAT
    【tarjan 拓扑排序 dp】bzoj1093: [ZJOI2007]最大半连通子图
    【贪心】bzoj1572: [Usaco2009 Open]工作安排Job
    【贪心优化dp决策】bzoj1571: [Usaco2009 Open]滑雪课Ski
    概述「并查集补集转化」模型&&luoguP1330 封锁阳光大学
    初涉tarjan缩点
    初涉三元环
  • 原文地址:https://www.cnblogs.com/luningning0901/p/5148255.html
Copyright © 2011-2022 走看看