首页 > 其他 > 详细

浅谈缓存的处理

时间:2015-11-27 12:45:23      阅读:281      评论:0      收藏:0      [点我收藏+]

   首先说一下iOS中的缓存机制

   在IOS应用程序开发中,为了减少与服务端的交互次数,加快用户的响应速度,一般都会在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类似。

   6、NSURLRequestReloadRevalidatingCacheData:验证本地数据与远程数据是否相同,如果不同则下载远程数据,否则使用本地数据。

  使用缓存机制进行缓存处理的话既可以提高访问的效率,也可以减轻服务器的压力,因为从本地cpu中取出数据的话,会比重新从网络上下载来讲快100~200倍;

  封装一个处理缓存的类 (eg:CacheManager)

   #import <Foundation/Foundation.h>

  1、首先写一个单例方法(下一篇我会详细介绍一下单例的实现以及作用)

 +(CacheManager *)sharedManager;

 2、 //判断name的缓存的数据文件是否存在

    -(BOOL)isDataExistsForName:(NSString *)name;

   3、 //保存数据

   -(void)saveData:(NSData *)data forName:(NSString *)name;

   4、//取数据

   -(NSData *)getDataFromName:(NSString *)name;

   5、//将第page页的数据保存在name文件中

   -(void)saveListData:(NSData *)data forName:(NSString *)name forPage:(NSInteger)page;

   6、//取路径

   -(NSString *)getPathWithName:(NSString *)name; -(void)clear;

   7、 //实现清除缓存 (就是清空你之前保存在沙盒路径下的文件夹)

  -(void)clear;

 下面为大家介绍下实现清除缓存时计算文件夹大小的方法:

   (1.)

    计算文件夹的大小

    +(float)fileSizeAtPath:(NSString *)path{

       NSFileManager *fileManager=[NSFileManager defaultManager];

       if([fileManager fileExistsAtPath:path]){

          long long size=[fileManager attributesOfItemAtPath:path error:nil].fileSize;

        return size/1024.0/1024.0; 

    }

    return 0;

}

    计算目录大小

    +(float)folderSizeAtPath:(NSString *)path{

        NSFileManager *fileManager=[NSFileManager defaultManager];

        float folderSize;

        if ([fileManager fileExistsAtPath:path]) {

             NSArray *childerFiles=[fileManager subpathsAtPath:path];

           for (NSString *fileName in childerFiles) {

               NSString *absolutePath=[path stringByAppendingPathComponent:fileName];

               folderSize +=[FileService fileSizeAtPath:absolutePath];

        }

     //SDWebImage框架自身计算缓存的实现

        folderSize+=[[SDImageCache sharedImageCache] getSize]/1024.0/1024.0;

        return folderSize;

    }

    return 0;

}

   (2.)

     清理缓存文件

    同样也是利用NSFileManager API进行文件操作,SDWebImage框架自己实现了清理缓存操作,我们可以直接调用。

    +(void)clearCache:(NSString *)path{

        NSFileManager *fileManager=[NSFileManager defaultManager];

        if ([fileManager fileExistsAtPath:path]) {

            NSArray *childerFiles=[fileManager subpathsAtPath:path];

            for (NSString *fileName in childerFiles) {

                //如有需要,加入条件,过滤掉不想删除的文件

                NSString *absolutePath=[path stringByAppendingPathComponent:fileName];

                [fileManager removeItemAtPath:absolutePath error:nil];

        }

    }

    [[SDImageCache sharedImageCache] cleanDisk];

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

浅谈缓存的处理

原文:http://www.cnblogs.com/MasterPeng/p/5000049.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!