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

  • 相关阅读:
    ( 三十一 )、 SpringBoot项目启动自动执行sql脚本
    转:OAuth 2.0 介绍
    采坑:python base64
    Redis学习——数据结构介绍(四)
    美化你的博客园,flash插件的使用
    Redis学习——详解Redis配置文件(三)
    Redis学习——Windows环境下Redis的安装(二)
    Redis学习——Linux环境下Redis的安装(一)
    NPM 安装速度慢,镜像修改
    日志配置(springboot、mybatis、Lombok)
  • 原文地址:https://www.cnblogs.com/luningning0901/p/5148255.html
Copyright © 2011-2022 走看看