- NSCache苹果提供的一套缓存机制,当今主流的SDWebImage正是使用了NSCache进行缓存
相对比使用NSMutableDictionary的优势有:
1.和NSMutableDictionary使用起来相似
2.线程安全,Mutable开发的类一般都是线程不安全的
3.当内存不足时会自动释放内存(所以从缓存中取数据的时候总要判断是否为空)
4.指定缓存的限额,当缓存超出限额自动释放内存
缓存限额:
1) 缓存数量
@property NSUInteger countLimit;
2) 缓存成本:设置缓存占用的内存大小,并不是一个严格的限制,当总数超过了totalCostLimit设定的值,系统会清除一部分缓存,直至总消耗低于totalCostLimit的值。
@property NSUInteger totalCostLimit;
NSCache代理方法,内部对象将要被移除时调用
//当缓存被移除的时候执行
- (void)cache:(NSCache *)cache willEvictObject:(id)obj{
NSLog(@"缓存移除 %@",obj);
}
使用NSCache,有一点需要注意:
当收到内存警告时调用removeAllObjects,不能够再次往NSCache实例对象中添加对象 而在其他位置调用removeAllObjects执行清空操作时,还是可以再次添加对象的