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: 缓存将要删除对象时调用,不能在此方法中修改缓存。仅仅用于后台的打印,以便于程序员的测试。

 #import "ViewController.h"

 @interface ViewController ()<NSCacheDelegate>

 @property (nonatomic, strong) NSCache * myChache;

 @end

 @implementation ViewController

 - (NSCache *)myChache
{
if (_myChache == nil) {
_myChache = [[NSCache alloc] init];
/** NSCache类以下几个属性用于限制成本
NSUInteger totalCostLimit "成本" 限制,默认是0(没有限制)
NSUInteger countLimit 数量的限制 默认是0 (没有限制)
// 设置缓存的对象,同时指定限制成本
-(void)setObject:(id) obj forKey:(id) key cost:(NSUInteger) g
*/
// 设置数量限额。一旦超出限额,会自动删除之前添加的东西
_myChache.countLimit = ; // 设置了存放对象的最大数量
_myChache.delegate = self;
}
return _myChache;
} - (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
for (int i = ; i < ; i ++) {
NSString * str = [NSString stringWithFormat:@"%d", i]; [self.myChache setObject:str forKey:str];
}
for (int i = ; i < ; i ++) {
NSLog(@"%@", [self.myChache objectForKey:[NSString stringWithFormat:@"%d", i]]);
}
} - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.view.backgroundColor = [UIColor whiteColor];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end

IOS缓存之NSCache缓存的更多相关文章

  1. iOS NSCache缓存类的了解

    前言:   最近面试时,问到了限定并发数的视频下载,当时回答的时通过GCD_barrier 处理,回来想想也可以通过NSCache处理,所以顺便复习一下,这个知识点. 一,关于NSCache说明 说明 ...

  2. iOS - OC NSCache 缓存

    前言 NSCache 是苹果提供的一个专门用来做缓存的类,当内存 "不足" 或超过限制的时候,会自动清理缓存,使用时可以指定缓存的数量和成本.用法与 NSMutableDictio ...

  3. iOS五种本地缓存数据方式

    iOS五种本地缓存数据方式   iOS本地缓存数据方式有五种:前言 1.直接写文件方式:可以存储的对象有NSString.NSArray.NSDictionary.NSData.NSNumber,数据 ...

  4. iOS 网络请求数据缓存

    1. NSURLCache简介: iOS对NSURLRequest提供了7种缓存策略:(实际上能用的只有4种) NSURLRequestUseProtocolCachePolicy // 默认的缓存策 ...

  5. NSCache 缓存

    前言 NSCache 是苹果提供的一个专门用来做缓存的类,当内存 "不足" 或超过限制的时候,会自动清理缓存,使用时可以指定缓存的数量和成本. 用法与 NSMutableDicti ...

  6. 【iOS】网络载入图片缓存与SDWebImage

    载入网络图片能够说是网络应用中必备的.假设单纯的去下载图片,而不去做多线程.缓存等技术去优化,载入图片时的效果与用户体验就会非常差. 一.自己实现载入图片的方法 tips: *iOS中全部网络訪问都是 ...

  7. NSCache缓存怎么来的

    什么是NSCache NSCache主要用来存储临时数据(键值对),当内存资源不够时,系统会自动释放部分数据.它有三个特点: • NSCache为了保持不占用过多的系统内存,它有多种自动回收内存策略: ...

  8. iOS - LocalCache 本地数据缓存

    1.自定义方式本地数据缓存 1.1 自定义缓存 1 沙盒路径下的 Library/Caches 用来存放缓存文件,保存从网络下载的请求数据,后续仍然需要继续使用的文件,例如网络下载的离线数据,图片,视 ...

  9. [原创]关于mybatis中一级缓存和二级缓存的简单介绍

    关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...

随机推荐

  1. Android 保存联系人,包括部门\职位\传真\地址\照片

    private void toSaveContactInfo() { ContentValues values = new ContentValues(); // 首先向RawContacts.CON ...

  2. hdoj 5392 Infoplane in Tina Town

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5392 #include<stdio.h> #include<cstring> ...

  3. BOM(制造数据管理)

    --工艺路线 DECLARE -- API input variables l_operation_tbl bom_rtg_pub.operation_tbl_type := bom_rtg_pub. ...

  4. Android LIstView初次创建getview方法执行多次问题

    写listview优化的时候,发现Listview初次创建的时候会多次执行getView方法. <?xml version="1.0" encoding="utf- ...

  5. flex中DataGrid里使用itemRenderer后数据无法绑定到数据源的问题

    <?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="ht ...

  6. Overview and tips for using STM32F303

    www.stmcu.org/download/index.php?act=down&id=5264 IntroductionThe purpose of this application no ...

  7. 编写一个JavaScript函数 parseQueryString,把URL参数解析为一个对象

    var url="http://www.taobao.com/index.php?key0=0&key1=1&key2=2"; function parseQuer ...

  8. 怎样对ListView的项进行排序

    当您使用资源浏览器查看文件时,您能够随心所欲的按名称.大小.类型及改动日期不同的列对文件进行大小排序..Net提供的ListView组件没有直接提供这样的功能,但要实现并不难.   ListView. ...

  9. 【项目实例】使用C#开发纽曼USB来电通来电弹屏客户端小结

    基于CRM客户和咨询者的普遍需求,老板决定在CRM系统上加入来电弹屏功能,所谓来电弹屏,就是当一个电话打入时,电脑会弹出该电话号码对应的客户.联系人或者供应商详细信息,如果是新号码,则添加一个新的客户 ...

  10. window.showModalDialog 与window.open传递参数的不同?

    简单的说,就是一个在弹出窗口之后可以做其它的事,即window.open 另一个在弹出窗口之后不能做其它的事,只能是关闭了当前的窗口之后才能做其它的事,即window.showModalDialog ...