iOS开发之NSCache

2020-05-16  本文已影响0人  DB001

  1. NSCache是苹果推出专门用来处理内存缓存的类;
  2. NSCache默认是线程安全的,在使用的时候可以不用考虑线程安全的问题;
  3. NSCache使用方法和NSDictionary`类似,当缓存文件超过最大限度的手会开启一个回收过程,吧最老的缓存对象回收;
  4. NSCache可以设置缓存的const(成本)和缓存的数量。
#import "ViewController.h"

@interface ViewController ()<NSCacheDelegate>

@property (nonatomic, strong) NSCache *cache;

@end

@implementation ViewController

-(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/nana/Desktop/placeholder.png"];
        
        //[self.cache setObject:data forKey:@(i)];
        //设置缓存的单位成本 缓存的大小  (8/3 ~ 2张)
        [self.cache setObject:data forKey:@(i) cost:3];
        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);
        }
    }
}


#pragma mark -----------------------
#pragma mark NSCacheDelegate
/**监听存储的过程*/
-(void)cache:(NSCache *)cache willEvictObject:(id)obj
{
    //内部开启回收过程的时候调用
    NSLog(@"--------内部开启回收过程");
}

@end
上一篇下一篇

猜你喜欢

热点阅读