NSCache
- 用来进行缓存处理,类似NSdictionary的使用
- 在收到内存警告时会主动调用
removeAllObject
- 线程安全,在多线程操作中,不需要对
NSCache
加锁 NSCache
的key是对对象进行Strong
引用,
存储数据
// NSCache 缓存处理类
NSCache *cache = [[NSCache alloc] init];
//存储数据
NSData *data = [NSData dataWithContentsOfFile:@"images/110.png"];
[cache setObject:data forKey:@"data_key"];
NSCache *cache = [[NSCache alloc] init];
//总成本数,如果发现储存数据大于5,那么会自动回收之前的对象
cache.totalCostLimit = 5;
for (int i = 0; i < 10; i ++) {
//存储数据
NSString *str = [NSString stringWithFormat:@"%d",i];
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
[cache setObject:data forKey:@(i) cost:1];
NSLog(@"%d",i);
}
// 设置的总成本是5,当在存储数据时,大于5,就会对前面的存储数据回收,当存储6时,就会回收之前存储的数据1
NSLog(@"===========");
for (int i = 0; i < 10; i ++) {
NSData *data = [cache objectForKey:@(i)];
if (data) {
NSLog(@"%@ -- c取出-%d",[cache objectForKey:@(i)],i);
}
}
//打印结果 下图
获取数据 ?的数据
//获取数据
[cache objectForKey:@"data_key"];
删除数据
//删除所有的数据
[cache removeAllObjects];
//删除对应key的数据
[cache removeObjectForKey:@"data_key"];
代理
- (void)setup {
NSCache *cache = [[NSCache alloc] init];
cache.delegate = self;
}
//对象回收的时候调用这个方法
- (void)cache:(NSCache *)cache willEvictObject:(id)obj {
}