NSCache
2016-05-15 本文已影响354人
珍此良辰
NSCache是什么?
- NSCache是苹果官方提供的缓存类,在AFNetWorking和SDWebImage等主流框架中被使用来管理缓存
- 根据苹果官方文档的说明:NSCache在系统内存紧张(较低)时,会自动释放对象(这个现象在模拟器中不会出现)
- 建议:接受到内存警告的使用调用removeAllObject方法释放对象
- NSCache的Key只是对对象进行Strong引用,不会拷贝,在清理的时候计算的是实际大小,不是引用的大小
- NSCache是线程安全的,在多线程操作中,不需要对其加锁
NSCache属性
@property (copy) NSString *name; // 名称
@property (nullable, assign) id<NSCacheDelegate> 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;