NSCache的介绍

NSCache是什么

NSCache对象是存储键值对的可变集合,类似于NSDictionary。NSCache类提供一个编程接口用来添加和删除对象,并根据缓存占用的大小和数量设置丢弃策略。

NSCache对象不同于其它可变集合:

  • NSCache类包含多种自动淘汰策略,来确保缓存不会占用太多的系统内存。如果其它程序需要内存,缓存策略会删除一些缓存,最小化其内存占用。
  • NSCache是线程安全的,当操作缓存时不用加锁。
  • 和NSMutableDictionay不同的是,NSCache不会copy的集合中的键对象。

NSCache通常用来存储临时数据,重用这些对象能够提供性能优势,因为不必被再次计算它们的值。然而,这些对象对于应用程序并不重要,如果内在不足可以被丢弃。如果丢弃,在需要的时候,会再次计算它们的值。

NSCache的属性与方法
//设置缓存占用的内存最大值。默认为0,内存大小没有限制。这并不是一个严格的限制,最终取决于缓存策略。
@property NSUInteger totalCostLimit;   
//设置缓存可保存的对象数量。效果同上。
@property NSUInteger countLimit;
//设置是否自动舍弃那些内存已经被丢弃的对象。
@property BOOL evictsObjectsWithDiscardedContent; 
//获取与指定键关联的对象
- (nullable ObjectType)objectForKey:(KeyType)key;
//在缓存中设置指定键名对应的值
- (void)setObject:(ObjectType)obj forKey:(KeyType)key; 
//在缓存中设置指定键名对应的值,并且指定该键值对的成本
- (void)setObject:(ObjectType)obj forKey:(KeyType)key cost:(NSUInteger)g;
//删除缓存中指定键名的对象
- (void)removeObjectForKey:(KeyType)key;
//删除缓存中的所有对象
- (void)removeAllObjects;
NSDiscardableContent

一个NSDiscardableContent对象的生命周期取决于counter变量。一个此对象是可清除的内存块,并用于跟踪其内存是否正在被其它对象使用。当这块内存正在被使用或仍被需要,此对象的counter这是会>=1。当这块内存将不被使用且可以被丢弃,counter=0.
当counter=0时,如果内存紧张,此内存块可能会被丢弃。调用discardContentIfPossible方法来丢弃内容,它将会释放counter=0的内存。
NSDiscardableContent对象默认初始化counter变量=1以确保它们不会被内存管理系统立即丢弃。因此,必须跟踪counter变量状态。调用beginContentAccess方法使counter+1确保对象不被丢弃。当不再需要此对象时,调用endContentAccess方法使counter-1。 - (BOOL)isContentDiscarded方法返回此对象内存是否已经丢弃。

你可能感兴趣的:(NSCache的介绍)