目录
1、NSCache的作用
2、NSCache的属性
3、NSCache的代理实现
作用:NSCache是苹果官方提供的的缓存类,具体使用是和NSDictionary很相似的,在AFNetworking和SDWebImage第三方框架中被用作管理缓存。
之前和大家分享过的SDWebImage中提到过NSCache传送门
1、NSCache作为一个对象其作用就是为了在内存很低的时候达到自动释放对象的功能。
2、NSCache 是线程安全的,在多线程操作中,不需要对 Cache 加锁。
3、NSCache 的 Key 只是做强引用,不需要实现 NSCopying 协议----如果你对NSCopying协议不是很了解,这个Demo可以帮到你传送门
属性 代理 展示
NSCache的代理实现
简单来讲就是你家来客人了,但是你家只能住10个人,但是来了20个人,那怎么办呢,你们家的管家(NSCache)就要清人了,那么清理的顺序是什么呢?是按照先来后到的顺序清理的,先清理先进来的人。下面代码举个例子....
#pragma mark IBActions (点击事件xib)
/*增*/
- (IBAction)addCache:(UIButton *)sender {
for (int i = 1; i<10; i++) {
// 在缓存中设置指定键名对应的值,并且指定回收成本,以便进行计算存储在缓存中对象的总成本,当出现内存警告或者超出总成本时,缓存就会进行删除部分元素的操作。
NSString *str = [NSString stringWithFormat:@"在这里进行了存储数据%@",@(i)];
[self.cache setObject:str forKey:@(i) cost:1
}
}
/*查*/
- (IBAction)checkCache:(UIButton *)sender {
NSLog(@"---------------------------------------------");
for (int i = 0; i < 10 ; i++) {
NSString *str = [self.cache objectForKey:@(i)];
if (str) {
NSLog(@"取出缓存中存储的数据-----%@",@(i));
}
}
}
/*清理*/
- (IBAction)cleanCache:(UIButton *)sender {
[self.cache removeAllObjects];
NSLog(@"清理缓存");
}
#pragma mark - NSCacheDelegate
// 即将回收对象的时候进行调用,实现代理方法之前要遵守NSCacheDelegate协议。
- (void)cache:(NSCache *)cache willEvictObject:(id)obj{
NSLog(@"回收--------%@",obj);
}
控制台输出 ----->可以看到缓存清理的顺序
以上是NSCache的介绍 属性以及方法的实现,希望能帮到你。。如果您想更直观看代码...Demo在这传送门