iOS—缓存YYCache框架
来源:互联网 发布:winebottler linux 编辑:程序博客网 时间:2024/05/17 21:43
下载地址 :点击打开链接
一、简介:
计算上的的cache 就是高速缓存,计算机组成课程里的定义是,存在于主存和cpu之间,主要用于解决CPU处理数据的速度远远大于读取主存数据的速度。
手机上也有cache ,主要作用是保存一些软件生成的临时文件,避免每次都要重复地向服务器请求相同的数据,即浪费用户流量,也影响app响应速度。
二、YYCache 的组成
YYCache 由YYcache、YYDiskCache、YYMemoryCache 和YYKVStroage组成,其中YYKVStorage可直接对sqlite 和文件系统进行读写(YYDiskCache的底屋实现)
注意点
1.如果保存的自定义对象不遵守NSCoding的协议或不实现NSCoding协议的方法,就不能使用YYDiskCache进行长期缓存;
- (void)encodeWithCoder:(NSCoder *)aCoder;- (instancetype)initWithCoder:(NSCoder *)aDecoder;
一、YYCache 基本使用
1、同步方式
//模拟数据 NSString *value=@"I want to know who is lcj ?"; //模拟一个key //同步方式 NSString *key=@"key"; YYCache *yyCache=[YYCache cacheWithName:@"LCJCache"]; //根据key写入缓存value [yyCache setObject:value forKey:key]; //判断缓存是否存在 BOOL isContains=[yyCache containsObjectForKey:key]; NSLog(@"containsObject : %@", isContains?@"YES":@"NO"); //根据key读取数据 id vuale=[yyCache objectForKey:key]; NSLog(@"value : %@",vuale); //根据key移除缓存 [yyCache removeObjectForKey:key]; //移除所有缓存 [yyCache removeAllObjects];
2、异步方式
//模拟数据 NSString *value=@"test文字"; //存取时key NSString *key =@"key"; //创建目录 YYCache *cache=[YYCache cacheWithName:@"haha"]; //判断缓存是否存在 [cache containsObjectForKey:key withBlock:^(NSString * _Nonnull key, BOOL contains) { }]; //根据key写入缓存 [cache setObject:value forKey:key withBlock:^{ }]; //读取 [cache objectForKey:key withBlock:^(NSString * _Nonnull key, id<NSCoding> _Nonnull object) { NSLog(@"%@",object); }]; //根据key 移除缓存 [cache removeObjectForKey:key withBlock:^(NSString * _Nonnull key) { }]; // 移除所有缓存 [cache removeAllObjectsWithBlock:^{ }]; //移除所有缓存带进度 [cache removeAllObjectsWithProgressBlock:^(int removedCount, int totalCount) { } endBlock:^(BOOL error) { if (!error) { NSLog(@"移除成功"); } else { NSLog(@"移除失败"); } }];
二、YYCache 缓存LRU清理
LRU(Least Recently used)算法大家都比较熟悉,翻译过来就是“最近最少使用”,LRU缓存就是使用这种原理实现,简单的说就是缓存一定量的数据,当超过设定的阈值时就把一些过期的数据删除掉,比如我们缓存10000条数据,当数据小于10000时可以随意添加,当超过10000时就需要把新的数据添加进来,同时要把过期数据删除,以确保我们最大缓存10000条,那怎么确定删除哪条过期数据呢,采用LRU算法实现的话就是将最老的数据删掉。
YYCache *cache=[YYCache cacheWithName:@"myText"]; //内存最大缓存数据个数 [cache.memoryCache setCountLimit:50]; //内存最大缓存开销,目前这个没有效果 [cache.memoryCache setCostLimit:1*1024]; //磁盘最大缓存开销 [cache.diskCache setCostLimit:1*1024]; //磁盘最大缓存数据个数 [cache.diskCache setCountLimit:50]; //设置磁盘lru动态清理频率 默认 60秒 [cache.diskCache setAutoTrimInterval:60]; for (int i=0; i<100; i++) { NSString *str=[NSString stringWithFormat:@"第%d条数据",i+1]; NSString *key=[NSString stringWithFormat:@"key%d",i]; [cache setObject:str forKey:key]; } NSLog(@"cache.memoryCache.totalCost=%lu",(unsigned long)cache.memoryCache.totalCost); NSLog(@"cache.memoryCache.costLimit=%lu",(unsigned long)cache.memoryCache.costLimit); NSLog(@"cache.memoryCache.totalCount=%lu",(unsigned long)cache.memoryCache.totalCount); NSLog(@"cache.memoryCache.countLimit=%lu",(unsigned long)cache.memoryCache.countLimit); NSLog(@"cache.diskCache.totalCost=%lu",(unsigned long)cache.diskCache.totalCost); NSLog(@"cache.diskCache.costLimit=%lu",(unsigned long)cache.diskCache.costLimit); NSLog(@"cache.diskCache.totalCount=%lu",(unsigned long)cache.diskCache.totalCount); NSLog(@"cache.diskCache.countLimit=%lu",(unsigned long)cache.diskCache.countLimit); for(int i=0 ;i<100;i++){ //模拟一个key NSString *key=[NSString stringWithFormat:@"key%d",i]; id vuale=[cache objectForKey:key]; NSLog(@"%@=%@",key ,vuale); }
阅读全文
1 0
- iOS—缓存YYCache框架
- IOS缓存管理之YYCache使用
- IOS缓存管理之YYCache使用
- iOS源码解析—YYCache(概述)
- iOS源码解析—YYCache(YYMemoryCache)
- iOS源码解析—YYCache(YYDiskCache)
- iOS开发 数据存储之YYCache
- YYKit系列之——YYCache使用
- YYKit系列之——YYCache使用
- iOS缓存框架-PINCache解读
- iOS缓存框架-PINCache解读
- iOS 网络请求框架 ASI缓存策略
- YYCache初学
- YYCache学习
- 深入源码理解YYCache 、SDWebImage、AFNetworking、NSCache 缓存方式与对比
- iOS—数据缓存
- iOS开发之缓存框架、内存缓存、磁盘缓存、NSCache、TMMemoryCache、PINMemoryCache、YYMemoryCache、TMDiskCache、PINDiskCache
- SQL简介与语法 IOS中FMDB缓存框架用法
- JDK环境变量配置及常用Java命令
- webService 根据wsdl地址生成java客户端代码
- 如何安装ionic,创建自己的项目,以及本地运行下载的别人的项目!
- JavaScript中escape()、encodeURI()、encodeURIComponent()区别详解
- matplotlib.pyplot
- iOS—缓存YYCache框架
- 多线程访问同一资源第一步:利用synchronized吃苹果,利用lock锁机制吃梨
- 继 博客园 服务器被攻击后,我司也出现这样问题
- d3d纹理过滤器配置
- 重装 11G(11.2.0.4) AMD组件
- 学习笔记_AngularJS
- nutz学习笔记
- 解决PKIX path building failed的问题以及示例
- HDU