NSCache

NSCache是什么?

  • NSCache是苹果官方提供的缓存类,在AFNetWorking和SDWebImage等主流框架中被使用来管理缓存
  • 根据苹果官方文档的说明:NSCache在系统内存紧张(较低)时,会自动释放对象(这个现象在模拟器中不会出现)
    • 建议:接受到内存警告的使用调用removeAllObject方法释放对象
  • NSCache的Key只是对对象进行Strong引用,不会拷贝,在清理的时候计算的是实际大小,不是引用的大小
  • NSCache是线程安全的,在多线程操作中,不需要对其加锁

NSCache属性


@property (copy) NSString *name;   //  名称
@property (nullable, assign) id delegate;  //  代理设置

@property NSUInteger totalCostLimit;    //  缓存空间的最大总成本,超出上限自动回收对象,默认为0,表示没有限制(限制是不精/不严格的)
@property NSUInteger countLimit;    //  能够缓存的对象最大数量,默认为0,表示没有限制(限制是不精/不严格的)
@property BOOL evictsObjectsWithDiscardedContent;  //  标记缓存是否回收废弃内容


NSCache方法


//  根据指定key取出对象
- (nullable ObjectType)objectForKey:(KeyType)key;
//  在缓存中设置指定key名对应的值,0成本
- (void)setObject:(ObjectType)obj forKey:(KeyType)key; // 0 cost
//  在缓存中设置指定key,并指定该key值对应的成本,用于计算记录在缓存中的所有对象的总成本
- (void)setObject:(ObjectType)obj forKey:(KeyType)key cost:(NSUInteger)g;

//  当出现内存警告或超出缓存总成本上限是,缓存会开启一个回收过程,删除部分元素
//  删除缓存中指定key的对象
- (void)removeObjectForKey:(KeyType)key;
//  删除缓存中所有的对象
- (void)removeAllObjects;

  • 代理方法

//  缓存将要删除对象时调用,一般在开发是调试用(注:不能在此方法中修改缓存 )
- (void)cache:(NSCache *)cache willEvictObject:(id)obj;

你可能感兴趣的:(NSCache)