一、NSCache

1.NSCache
这个类,SDWebImage在干什么的时候用到这个类了,缓存,cleanMemory,清除内存缓存的时候,用到这个类了,所以这个类的功能是,内存缓存,它提供了一套缓存机制,
我们之前,自己在模拟SDWebImage的时候,我们缓存图片,用的是什么,字典,NSMutableDictionary,这个类在用的时候,和字典用法几乎是一样的,和字典用起来是一样的,但是它是不一样的东西,字典是用来存储数据的,而NSCache是用来缓存数据的,
1)NSMutableDictionary是线程不安全的,而NSCache是线程安全的,
2)当内存不足时,NSMutableDictionary什么都不会做,而NSCache会自动释放内存,因为它会自动释放内存,所以我们存在NSCache里边的对象,我们用的时候,先要去判断是否为空,因为有可能数据已经被清除掉了,
3)用NSCache比用NSMutableDictionary有两个好的地方:
- NSCache可以设置缓存的限额,缓存数量:
@property NSUInteger countLimit;
可以通过两种方式来设置缓存的限额:
一种是设置里边能存几条数据,是设置缓存的数量,
一种是设置缓存的成本,@property NSUInteger totalCostLimit;

缓存成本是设置,NSCache,最大能存多少数据量,比如说,我设置5兆,那NSCache最多只能存5兆的数据,超过5兆之后,会把之前的数据给移除掉,
我设置缓存的数量,最大能存5条,那我放第6条的时候呢,能不能放,能放,但是它会把第一条数据给移除掉,
下边我们来演示一下NSCache,
二、演示NSCache
1.新建一个项目,Name:09-NSCache

我们先往NSCache里边存一些数据,它要缓存数据的话,一般情况下,我们会把它定义成一个属性,
@property(nonatomic,strong)NSCache *cache;

好,我们要用这个属性,首先要去初始化,

- (NSCache *)cache{
if(_cache == nil){
_cache = [[NSCache alloc] init];
}
return _cache;
}
初始化完了,下边要去用它,它能缓存数据,说明我可以往里边去放内容,它可以添加数据,当这个数据不用的时候,我们可以跟字典一样,我们可以移除一条数据,怎么添加,怎么移除呢,它的使用方式,跟字典几乎是一样的,几乎是一样的,但是有一点点差距,
字典在用的时候,可以这么来用,假设它是字典的话,
self.cache[key] = value;

但是,NSCache不能用中括号的方式,它只能用set方法,

往里边去添加一条数据,