iOS NSCache缓存类的详解
来源:互联网 发布:mac上如何下载office 编辑:程序博客网 时间:2024/06/02 09:40
NSCache:专门做缓存的类
NSCache简介:NSCache是苹果官方提供的缓存类,用法与NSMutableDictionary的用法很相似,在AFNetworking和SDWebImage中,使用它来管理缓存。
NSCache在系统内存很低时,会自动释放一些对象(出自苹果官方文档,不过在模拟器中模拟内存警告时,不会做缓存的清理动作) 为了确保接收到内存警告时能够真正释放内存,最好调用一下removeAllObjects方法。
NScache是线程安全的,在多线程操作中,不需要对Cache加锁。
NScache的key只是做强引用,不需要实现NScopying协议。
NSCache的属性:
delegate代理属性
totalCostLimit :缓存空间的最大成本,超出上限会自动回收对象。默认值是0没有限制。
countLimit:能够缓存对象的最大数量,默认值也是0(默认没有限制)。
(当超出缓存最大成本或数量时,NSCache会把前面的数据即最开始存的给清除掉)
evictsObjectsWithDiscardedContent:标示是否回收废弃的内容,默认值是YES(自动回收)。
NSCache的方法:
-objectForKey:返回与键值关联的对象。
-setObject: forKey: 在缓存中设置指定键名对应的值。与可变字典不同的是,缓存对象不会对键名做copy操作 0成本
-setObject: forKey: cost: 在缓存中设置指定键名对应的值,并且指定该键值对的成本。成本cost用于计算记录在缓冲中所有对象的总成本。当出现内存警告,或者超出缓存的成本上限时,缓存会开启一个回收过程,删除部分元素。
-removeObjectForKey:删除缓存中指定键名的对象。
-removeAllObjects:删除缓存中的所有对象。
委托方法:
-cache: willEvictObject: 缓存将要删除对象时调用,不能在此方法中修改缓存。仅仅用于后台的打印,以便于程序员的测试。
举例验证如下:
没有设置代理时的运行结果如下:
因为限额最大数量是30,所以NSCache把前面的0~69的对象全部删除清理了。
遵循代理方法后,打印结果如下:
发现此代理方法就是在清理缓存对象之前告知程序员,便于调试而已。
所以在原来的工程中做缓存池的可变字典都可以用NScache进行替代了。代码如下:
CZApp.h
CZApp.m
viewController.m
- iOS NSCache缓存类的详解
- NSCache缓存类的详解
- IOS学习 NSCache 缓存类
- iOS 【原生API 缓存类NSCache】
- iOS缓存 NSCache详解及SDWebImage缓存策略源码分析
- NSCache:实现缓存的类可以提高效率
- NSCache的缓存
- NSCache 缓存类源码分析
- NSCache缓存
- iOS---NSCache的简单使用
- ios之NSCache的使用
- iOS 如何在程序中使用NSCache实现缓存
- iOS网络——NSCache设置网络请求缓存
- NSCache 原理 (著名开源框架SDWebImage 就是使用的NSCache实现的缓存)
- iOS_缓存NSCache
- OC缓存 NSCache介绍
- iOS开发之缓存框架、内存缓存、磁盘缓存、NSCache、TMMemoryCache、PINMemoryCache、YYMemoryCache、TMDiskCache、PINDiskCache
- OS缓存策略——NSCache的简单使用
- Xcode-iOS10.3新特性如何动态修改APP图标
- Snmp学习总结(二)——WinXP安装和配置SNMP
- sql server数据库定时自动备份
- int main(int argc, char* argv[])参数意义
- Snmp学习总结(三)——Win7安装和配置SNMP
- iOS NSCache缓存类的详解
- SQL Server用户'sa'登录失败(错误18456)
- Snmp学习总结(四)——WinServer2003安装和配置SNMP
- mysql保留小数位数-小结
- jdk+eclipse+adt+sdk+avd的Android环境搭建
- AR乐园实例教程项目1---AR动物园(上)的实现
- php empty,isset,is_null比较(差异与异同)
- Snmp学习总结(五)——WindowsServer2008安装和配置SNMP
- HttpSessionBindingListener实现在线人员查看即人数统计