一、NSCache知识点补充,关注一下又不会怀孕.pn

2019-09-18 01:24栏目:大奖888官网登录
TAG:

图片 1文艺求关注.png

一、NSCache知识点补充

  • 01.NSCache是专门用来进行缓存处理的

  • 02.NSCache简单介绍:

    • 2-1 NSCache是苹果官方提供的缓存类,具体使用和NSDictionary类似,在AFN和SDWebImage框架中被使用来管理缓存
    • 2-2 苹果官方解释NSCache在系统内存很低时,会自动释放对象(但模拟器演示不会释放)
      建议:接收到内存警告时主动调用removeAllObject方法释放对象
    • 2-3 NSCache是线程安全的,在多线程操作中,不需要对NSCache加锁
    • 2-4 NSCache的Key只是对对象进行Strong引用,不是拷贝
  • 03 属性介绍:

    • name:名称
    • delegete:设置代理
    • totalCostLimit:缓存空间的最大总成本,超出上限会自动回收对象。默认值为0,表示没有限制
    • countLimit:能够缓存的对象的最大数量。默认值为0,表示没有限制
    • evictsObjectsWithDiscardedContent:标识缓存是否回收废弃的内容
  • 04 方法介绍

//在缓存中设置指定键名对应的值,0成本
- (void)setObject:(ObjectType)obj forKey:(KeyType)key;
//在缓存中设置指定键名对应的值,并且指定该键值对的成本,用于计算记录在缓存中的所有对象的总成本,
//出现内存警告或者超出缓存总成本上限的时候,缓存会开启一个回收过程,删除部分元素
- (void)setObject:(ObjectType)obj forKey:(KeyType)key cost:(NSUInteger)g;
//删除缓存中指定键名的对象
- (void)removeObjectForKey:(KeyType)key;
//删除缓存中所有的对象
- (void)removeAllObjects;
    1. NSCache是专门用来进行缓存处理的,
    1. NSCache简单介绍:
    • NSCache是苹果官方提供的缓存类,具体使用和NSDictionary类似,在AFN和SDWebImage框架中被使用来管理缓存
    • 苹果官方解释NSCache在系统内存很低时,会自动释放对象(但模拟器演示不会释放)
      • 建议:接收到内存警告时主动调用removeAllObject方法释放对象
    • NSCache是线程安全的,在多线程操作中,不需要对NSCache加锁
    • NSCache的Key只是对对象进行Strong引用,不是拷贝
    1. 属性介绍:
    • name:名称
    • delegete:设置代理
    • totalCostLimit:缓存空间的最大总成本,超出上限会自动回收对象。默认值为0,表示没有限制
    • countLimit:能够缓存的对象的最大数量。默认值为0,表示没有限制
    • evictsObjectsWithDiscardedContent:标识缓存是否回收废弃的内容
    1. 方法介绍
  • <h5>NSCache</h5>
    • NSCache是专门用来进行缓存处理的
  • <h5>NSCache简单介绍</h5>
    • 1-1.NSCache是苹果官方提供的缓存类,具体使用和NSDictionary类似,在AFN和SDWebImage框架中被使用来管理缓存
    • 1-2.苹果官方解释NSCache在系统内存很低时,会自动释放对象(但模拟器演示不会释放)
      • 建议:接收到内存警告时主动调用removeAllObject方法释放对象
    • 1-3.NSCache是线程安全的,在多线程操作中,不需要对NSCache进行加锁
    • 1-4.NSCache的Key只是对对象进行Strong引用,不是copy
//在缓存中设置指定键名对应的值,0成本
- (void)setObject:(ObjectType)obj forKey:(KeyType)key;

//在缓存中设置指定键名对应的值,并且指定该键值对的成本,用于计算记录在缓存中的所有对象的总成本,出现内存警告或者超出缓存总成本上限的时候,缓存会开启一个回收过程,删除部分元素
- (void)setObject:(ObjectType)obj forKey:(KeyType)key cost:(NSUInteger)g;

//删除缓存中指定键名的对象
- (void)removeObjectForKey:(KeyType)key;

//删除缓存中所有的对象
- (void)removeAllObjects;
  • <h5>补充--iOS开发中的- 磁盘缓存</h5>
    • Documents:连接iTunes,做自动备份的,苹果官方规定,不允许将缓存内容放在此目录下
    • Library:- Caches:专门用来处理缓存的,- Preferences:偏好设置,用来保存一些账号信息
    • tmp:临时存储
  • <h5>NSCache基本使用</h5>
@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中拉三个按钮,分别修改修改名称为:添加数据、检查缓存、清理缓存,并拖线

// 添加数据- addDataBtnClick: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:@ cost:2]; //与字典用法类似 //cost 与 totalCostLimit 配对使用, NSLog(@"存数据%zd", i); }}

// 检查数据- chectDataBtnClick:sender { NSLog(@"++++++++++++++++++++++++++++++++"); for (NSInteger i = 0; i < 10; i++) { NSData *data = [self.cache objectForKey:@]; if  { NSLog(@"取出数据%zd", i ); } }}

// 删除数据- removeDataBtnClick:sender { [self.cache removeAllObjects];}

#pragma - NSCache代理方法// 即将要回收对象的时候,调用该代理方法- cache:(NSCache *)cache willEvictObject:obj { NSLog(@"即将回收%zd", [obj length]);}

图片 2关注一下又不会怀孕.png

版权声明:本文由大奖888-www.88pt88.com-大奖888官网登录发布于大奖888官网登录,转载请注明出处:一、NSCache知识点补充,关注一下又不会怀孕.pn