NSCache
2016-07-07 11:14
211 查看
NSCache
NSCache 是苹果官方提供的缓存类,用法与 NSMutableDictionary 的用法很相似,在 AFNetworking 和 SDWebImage 中,使用它来管理缓存NSCache 在系统内存很低时,会自动释放一些对象
备注:这句话源自苹果的官方文档,不过在模拟器中模拟内存警告时,缓存不会做清理动作 为了确保接收到内存警告时能够真正释放内存,最好调用一下 removeAllObjects 方法
NSCache 是线程安全的,在多线程操作中,不需要对 Cache 加锁
NSCache 的 Key 只是做强引用,不需要实现 NSCopying 协议
属性
name delegate totalCostLimit缓存空间的最大总成本,超出上限会自动回收对象 默认值是 0,表示没有限制
countLimit
能够缓存对象的最大数量 默认值是 0,表示没有限制
evictsObjectsWithDiscardedContent
标示缓存是否回收废弃的内容 默认值是 YES,表示自动回收
方法
-objectForKey: 返回与键值关联的对象 -setObject:forKey:在缓存中设置指定键名对应的值 与可变字典不同,缓存对象不会对键名做 copy 操作 0 成本 -setObject:forKey:cost:
在缓存中设置指定键名对应的值,并且指定该键值对的成本 成本 (cost) 用于计算记录在缓冲中的所有对象的总成本
置对象并指定”成本”,成本可以自行指定
啥叫成本?
例子:缓存图片 缓存 100 张图片 将图片的”宽 * 高”当作成本,图像”像素” 10M 当作缓存成本,无论缓存的多少张照片,只要像素值超过 10M,就自动清理 缓存图像的时候,使用成本,比单纯设置数量要科学!(void)setObject:(id)obj forKey:(id)key cost:(NSUInteger)g;
当出现内存警告时,或者超出缓存的总成本上限时,缓存会开启一个回收过程,删除部分元素
-removeObjectForKey:
删除缓存中,指定键名的对象
-removeAllObjects
删除缓存中所有对象(很可怕,最好别用)
委托方法
cache:willEvictObject缓存将要删除对象时调用 不能在此方法中修改缓存
代码演练
需要实现NSCacheDelegate
实现代理方法:
?
?
?
?
?
通过打印结果可以知道,当超多最大成本限制的时候,会先清除缓存中的一条数据,再存入一条新的数据。最后缓存中只能保存最大成本数的数据,即10条。
相关文章推荐
- AM335x NorFlash NonMux boot设计---记录一段曲折的bootloader
- C# 读取xls格式的文件
- 第15周 啊哈算法 冒泡排序算法
- bootstrap学习笔记-下拉菜单
- android xml详解
- Failed to load the JNI shared library
- eclipse生成boolean型变量的getter是is开头
- java list倒序输出及复制list集合
- 生活中的物理学、化学
- centos7 docker tomcat7
- InputStreamReader/OutputStreamWriter乱码问题解决
- NDK 学习笔记
- 用pcl读取xtion点云
- 从写博客开始
- spring-session
- 【机器学习】常见算法分类汇总
- ViewPager+RadioGroup实现微信UI界面
- PHP第一站,反思复习之路
- hdu 1075 What Are You Talking About STL的使用
- vim速查手册(随时更新)