iOS 【原生API 缓存类NSCache】
2015-12-08 19:02
330 查看
// // ViewController.m // 0712-03NSCache的使用-01 // // Created by 王中尧 on 16/7/12. // Copyright © 2016年 wzy. All rights reserved. // /* NSCache 和 NSMutableDictionary 很像,是苹果官方提供的缓存类,在AFN和SDWebImage框架中被使用来管理缓存 ① 根据一个key值存储数据 ② 可以设置 每个存入数据的成本 和 最大成本 超出成本就会回收(先存入的数据会先被回收) ③ delegate方法:开启回收过程的时候调用(这个代理方法一般调试的时候使用) ④ 缓存最大成本(最大缓存的成本) 缓存总数量(最大缓存的数量) 超出就会被清空回收 取数据时就会取满足数量的最新添加的数据 两个属性同时设置,则谁更小,满足谁(二者设置冲突取小者) ⑤ NSCache可以去替换NSDictionary,在多图下载综合案例中,二级缓存中 内存缓存 的部分可以用NSCache去定义一个属性存储。(就不用NSDictionary去保存内存缓存了 ⑥ NSCache是线程安全的,在多线程操作中,不需要对NSCache加锁 ⑦ NSCache的Key只是对对象进行Strong引用,不是拷贝,在清理的时候计算的是实际大小而不是引用的大小 */ #import "ViewController.h" @interface ViewController () <NSCacheDelegate> @property (nonatomic, strong) NSCache *cache; @end @implementation ViewController - (NSCache *)cache { if (!_cache) { NSCache *cache = [[NSCache alloc] init]; cache.delegate = self; // 设置缓存的总数量,如果超过了 缓存的总数量 那么该对象内部会开启一个回收过程(先把之前的对象删除,存储后面的数据) cache.countLimit = 5; // 设置缓存的总成本,如果超过了 缓存的总成本 那么该对象内部会开启一个回收过程(先把之前的对象删除,存储后面的数据) cache.totalCostLimit = 4; _cache = cache; } return _cache; } - (IBAction)setData:(id)sender { for (int i = 0; i < 15; i ++) { NSData *data = [NSData dataWithContentsOfFile:@"/Users/wangzhongyao/Desktop/打印 知识点.doc"]; [self.cache setObject:data forKey:@(i) cost:1]; // 往cache中写入值,cost为单位成本(相对于 总成本 和 总数量 而言的) NSLog(@"保存第%d个数据", i); } NSLog(@"set************"); } - (IBAction)getData:(id)sender { for (int i = 0; i < 15; i ++) { NSData *data = [self.cache objectForKey:@(i)]; if (data) { NSLog(@"取出第%d个数据", i); } } NSLog(@"get-------------"); } #pragma mark - NSCacheDelegate (NSCache只有这么一个delegate方法) - (void)cache:(NSCache *)cache willEvictObject:(id)obj { NSLog(@"---开启回收机制时调用---"); } @end */
/* 2016-07-12 20:51:18.828 0712-03NSCache的使用-01[9038:880483] 保存第0个数据 2016-07-12 20:51:18.829 0712-03NSCache的使用-01[9038:880483] 保存第1个数据 2016-07-12 20:51:18.830 0712-03NSCache的使用-01[9038:880483] 保存第2个数据 2016-07-12 20:51:18.831 0712-03NSCache的使用-01[9038:880483] 保存第3个数据 2016-07-12 20:51:18.833 0712-03NSCache的使用-01[9038:880483] ---开启回收机制时调用--- 2016-07-12 20:51:18.833 0712-03NSCache的使用-01[9038:880483] 保存第4个数据 2016-07-12 20:51:18.835 0712-03NSCache的使用-01[9038:880483] ---开启回收机制时调用--- 2016-07-12 20:51:18.835 0712-03NSCache的使用-01[9038:880483] 保存第5个数据 2016-07-12 20:51:18.835 0712-03NSCache的使用-01[9038:880483] ---开启回收机制时调用--- 2016-07-12 20:51:18.836 0712-03NSCache的使用-01[9038:880483] 保存第6个数据 2016-07-12 20:51:18.836 0712-03NSCache的使用-01[9038:880483] ---开启回收机制时调用--- 2016-07-12 20:51:18.836 0712-03NSCache的使用-01[9038:880483] 保存第7个数据 2016-07-12 20:51:18.837 0712-03NSCache的使用-01[9038:880483] ---开启回收机制时调用--- 2016-07-12 20:51:18.837 0712-03NSCache的使用-01[9038:880483] 保存第8个数据 2016-07-12 20:51:18.837 0712-03NSCache的使用-01[9038:880483] ---开启回收机制时调用--- 2016-07-12 20:51:18.837 0712-03NSCache的使用-01[9038:880483] 保存第9个数据 2016-07-12 20:51:18.838 0712-03NSCache的使用-01[9038:880483] ---开启回收机制时调用--- 2016-07-12 20:51:18.838 0712-03NSCache的使用-01[9038:880483] 保存第10个数据 2016-07-12 20:51:18.838 0712-03NSCache的使用-01[9038:880483] ---开启回收机制时调用--- 2016-07-12 20:51:18.839 0712-03NSCache的使用-01[9038:880483] 保存第11个数据 2016-07-12 20:51:18.839 0712-03NSCache的使用-01[9038:880483] ---开启回收机制时调用--- 2016-07-12 20:51:18.839 0712-03NSCache的使用-01[9038:880483] 保存第12个数据 2016-07-12 20:51:18.840 0712-03NSCache的使用-01[9038:880483] ---开启回收机制时调用--- 2016-07-12 20:51:18.840 0712-03NSCache的使用-01[9038:880483] 保存第13个数据 2016-07-12 20:51:18.840 0712-03NSCache的使用-01[9038:880483] ---开启回收机制时调用--- 2016-07-12 20:51:18.841 0712-03NSCache的使用-01[9038:880483] 保存第14个数据 2016-07-12 20:51:18.841 0712-03NSCache的使用-01[9038:880483] set************ 2016-07-12 20:51:22.109 0712-03NSCache的使用-01[9038:880483] 取出第11个数据 2016-07-12 20:51:22.109 0712-03NSCache的使用-01[9038:880483] 取出第12个数据 2016-07-12 20:51:22.110 0712-03NSCache的使用-01[9038:880483] 取出第13个数据 2016-07-12 20:51:22.110 0712-03NSCache的使用-01[9038:880483] 取出第14个数据 2016-07-12 20:51:22.110 0712-03NSCache的使用-01[9038:880483] get------------- */
相关文章推荐
- php文件缓存类用法实例分析
- 简单实用的网站PHP缓存类实例
- NSURLCache和NSCache简介
- NSCache在AFNetworking及SDWebImage中的使用流程
- iOS---NSCache的简单使用
- SDWebImage源码解读,分解流程,超细注解,进阶必备
- [编写高质量iOS代码的52个有效方法](十一)系统框架
- iOS之《Effective Objective-C 2.0》读书笔记(50)
- NSCache
- NSCache
- NSCache
- Android图片加载的缓存类
- php实现的redis缓存类定义与使用方法示例
- iOS 【网端数据解析 JSON(MJExtension)& XML(NSXMLParser/GDataParser)】
- iOS视频拍摄压缩上传和播放
- 动画弹出式按钮OXExpandingButtonBar
- PhoenixBIOS设置工具
- 谈谈iOS Animation
- iOS7新特性
- iOS7时代我们用什么来追踪和识别用户?