参考:iOS基础进阶班合辑-大神推荐
本文是上面课程的摘要,只用于自己快速浏览.
目录
08 iOS大神班-网络多线程-第三章(中)
【录播】NSCache简单介绍(4分钟)
NSCache是苹果官方提供的缓存类,具体使用和NSMutableDictionary类似,在AFN和SDWebImage框架中被使用来管理缓存
苹果官方解释NSCache在系统内存很低时,会自动释放对象,建议:接收到内存警告时主动调用removeAllObject方法释放对象
NSCache是线程安全的,在多线程操作中,不需要对NSCache加锁
NSCache只是对Key进行Strong引用,不是拷贝
【录播】NSCache基本使用(16分钟)
创建
-(NSCache *)cache{
if (_cache == nil) {
_cache = [[NSCache alloc]init];
//设置最大缓存数据的数量,如果超出该限制那么内部会自动开启一个回收过程把最先存储的数据删除
//_cache.countLimit = 8;
//设置最大的缓存成本(量) 成本:单位概念
//image.size.height * image.size.width * image.scale * image.scale SD框架中图片的成本计算
_cache.totalCostLimit = 8;
//设置代理
_cache.delegate = self;
}
return _cache;
}
存数据
- (IBAction)saveBtnClick:(id)sender {
//存数据
for (int i = 0; i < 10; ++i) {
NSData *data = [NSData dataWithContentsOfFile:@"/Users/xiaomage/Desktop/Snip20161121_67.png"];
//[self.cache setObject:data forKey:@(i)];
//设置缓存的单位成本 缓存的大小
[self.cache setObject:data forKey:@(i) cost:1];
NSLog(@"存数据---%zd",i);
}
NSLog(@"____________________");
}
取数据
- (IBAction)checkBtnClick:(id)sender {
//取数据
for (int i = 0; i < 10; ++i) {
NSData *data = [self.cache objectForKey:@(i)];
//校验是否有该数据
if (data) {
NSLog(@"取数据---%zd",i);
}
}
}
代理方法
-(void)cache:(NSCache *)cache willEvictObject:(id)obj{
//内部开启回收过程的时候调用
NSLog(@"--------内部开启回收过程");
}
【录播】NSCache应用多图案例(2分钟)
行者常至,为者常成!