首页 > 移动平台 > 详细

IOS缓存之NSCache缓存

时间:2015-11-03 17:30:39      阅读:321      评论:0      收藏:0      [点我收藏+]

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

 

 1 #import "ViewController.h"
 2 
 3 @interface ViewController ()<NSCacheDelegate>
 4 
 5 @property (nonatomic, strong) NSCache * myChache;
 6 
 7 @end
 8 
 9 @implementation ViewController
10 
11 - (NSCache *)myChache
12 {
13     if (_myChache == nil) {
14         _myChache = [[NSCache alloc] init];
15         /**  NSCache类以下几个属性用于限制成本
16          NSUInteger totalCostLimit  "成本" 限制,默认是0(没有限制)
17          NSUInteger countLimit  数量的限制  默认是0 (没有限制)
18          // 设置缓存的对象,同时指定限制成本
19          -(void)setObject:(id) obj  forKey:(id) key cost:(NSUInteger) g
20          */
21         // 设置数量限额。一旦超出限额,会自动删除之前添加的东西
22         _myChache.countLimit = 5;  // 设置了存放对象的最大数量
23         _myChache.delegate = self;
24     }
25     return _myChache;
26 }
27 
28 - (void)  touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
29 {
30     for (int i = 0; i < 10; i ++) {
31         NSString * str = [NSString stringWithFormat:@"%d", i];
32         
33         [self.myChache setObject:str forKey:str];
34     }
35     for (int i = 0; i < 10; i ++) {
36         NSLog(@"%@", [self.myChache objectForKey:[NSString stringWithFormat:@"%d", i]]);
37     }
38 }
39 
40 - (void)viewDidLoad {
41     [super viewDidLoad];
42     // Do any additional setup after loading the view, typically from a nib.
43     self.view.backgroundColor = [UIColor whiteColor];
44 }
45 
46 - (void)didReceiveMemoryWarning {
47     [super didReceiveMemoryWarning];
48     // Dispose of any resources that can be recreated.
49 }
50 
51 @end

技术分享

 

IOS缓存之NSCache缓存

原文:http://www.cnblogs.com/YU411524/p/4933475.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!