-(NSCache *)cache
{
if (_cache == nil) {
_cache = [[NSCache alloc]init];
_cache.totalCostLimit = 5;//總成本數(shù)是5 ,如果發(fā)現(xiàn)存的數(shù)據(jù)超過(guò)中成本那么會(huì)自動(dòng)回收之前的對(duì)象
_cache.delegate = self;
}
return _cache;
}
//存數(shù)據(jù)
- (IBAction)addBtnClick:(id)sender
{
//NSCache的Key只是對(duì)對(duì)象進(jìn)行Strong引用谎脯,不是拷貝(和可變字典的區(qū)別)
for (NSInteger i = 0; i<10; i++) {
NSData *data = [NSData dataWithContentsOfFile:@"/Users/beidou/Desktop/29381f30e924b8995d7368d66a061d950b7bf695.jpg"];
//cost:成本
[self.cache setObject:data forKey:@(i) cost:1];
NSLog(@"存數(shù)據(jù)%zd",i);
}
}
//取數(shù)據(jù)
- (IBAction)checkBtnClick:(id)sender
{
//? ? NSLog(@"+++++++++++++++");
//? ? for (NSInteger i = 0; i<10; i++) {
//? ? ? ? NSData *data = [self.cache objectForKey:@(i)];
//? ? ? ? if (data) {
//? ? ? ? ? ? NSLog(@"取出數(shù)據(jù)%zd",i);
//? ? ? ? }
//? ? }
NSData *data = [self.cache objectForKey:@(8)];
if (data) {
NSLog(@"取出數(shù)據(jù)%@",data);
}
}
//刪除數(shù)據(jù)
- (IBAction)removeBtnClick:(id)sender
{
[self.cache removeAllObjects];
}
#pragma mark ----------------------
#pragma mark NSCacheDelegate
//即將回收對(duì)象的時(shí)候調(diào)用該方法
-(void)cache:(NSCache *)cache willEvictObject:(id)obj
{
NSLog(@"回收%zd",[obj length]);
}