正确使用NSCache

正确使用NSCache_第1张图片
文艺求关注.png
  • NSCache
    • NSCache是专门用来进行缓存处理的
  • NSCache简单介绍
    • 1-1.NSCache是苹果官方提供的缓存类,具体使用和NSDictionary类似,在AFN和SDWebImage框架中被使用来管理缓存
    • 1-2.苹果官方解释NSCache在系统内存很低时,会自动释放对象(但模拟器演示不会释放)
      • 建议:接收到内存警告时主动调用removeAllObject方法释放对象
    • 1-3.NSCache是线程安全的,在多线程操作中,不需要对NSCache进行加锁
    • 1-4.NSCache的Key只是对对象进行Strong引用,不是copy

  • 补充--iOS开发中的- 磁盘缓存
    • Documents:连接iTunes,做自动备份的,苹果官方规定,不允许将缓存内容放在此目录下
    • Library:
      - Caches:专门用来处理缓存的,
      - Preferences:偏好设置,用来保存一些账号信息
    • tmp:临时存储

  • NSCache基本使用
@property (nonatomic, strong) NSCache *cache;
- (NSCache *)cache {

    if (_cache == nil) {
        _cache = [[NSCache alloc] init];
        _cache.totalCostLimit = 5;  //总成本数为5,如果发现存的数据超过总成本那么会自动回收之前的对象, ! ! 与下面cost配合使用
        _cache.delegate = self; //开发中一般用不到,一般用于测试
//        _cache.countLimit = 5;  //设置最多可以缓存多少个数据,  
    }
    return _cache;
}
// 在storyboard中拉三个按钮,分别修改修改名称为:添加数据、检查缓存、清理缓存,并拖线
// 添加数据
- (IBAction)addDataBtnClick:(id)sender {
    
    // NSCache的Key只是对对象进行Strong引用,不是copy
    // imageData放在外面,data是同一个对象,即一个对象加了10个强引用,他的总成本为1,不会回收处理
//    NSData *imageData = [NSData dataWithContentsOfFile:@"/Users/Vincent/Desktop/互斥锁.png"];
    for (NSInteger i = 0; i < 10; i++) {
        
        // imageData放for循环里面,创建了10个对象,他的总成本为10,会进行回收处理
        NSData *imageData = [NSData dataWithContentsOfFile:@"/Users/Vincent/Desktop/互斥锁.png"];
        
        [self.cache setObject:imageData forKey:@(i) cost:2];    //与字典用法类似  //cost 与 totalCostLimit 配对使用,
        NSLog(@"存数据%zd", i);
    }
}
// 检查数据
- (IBAction)chectDataBtnClick:(id)sender {
    
    NSLog(@"++++++++++++++++++++++++++++++++");
    for (NSInteger i = 0; i < 10; i++) {
        NSData *data = [self.cache objectForKey:@(i)];
        if (data) {
            NSLog(@"取出数据%zd", i );
        }
    }
}
// 删除数据
- (IBAction)removeDataBtnClick:(id)sender {
    [self.cache removeAllObjects];
}
#pragma - NSCache代理方法
// 即将要回收对象的时候,调用该代理方法
- (void)cache:(NSCache *)cache willEvictObject:(id)obj {

    NSLog(@"即将回收%zd", [obj length]);
}
正确使用NSCache_第2张图片
关注一下又不会怀孕.png

你可能感兴趣的:(正确使用NSCache)