NSCache是什么
NSCache對象是存儲鍵值對的可變集合,類似于NSDictionary。NSCache類提供一個編程接口用來添加和刪除對象,并根據(jù)緩存占用的大小和數(shù)量設置丟棄策略。
NSCache對象不同于其它可變集合:
- NSCache類包含多種自動淘汰策略,來確保緩存不會占用太多的系統(tǒng)內存。如果其它程序需要內存,緩存策略會刪除一些緩存,最小化其內存占用。
- NSCache是線程安全的,當操作緩存時不用加鎖。
- 和NSMutableDictionay不同的是,NSCache不會copy的集合中的鍵對象。
NSCache通常用來存儲臨時數(shù)據(jù),重用這些對象能夠提供性能優(yōu)勢,因為不必被再次計算它們的值。然而,這些對象對于應用程序并不重要,如果內在不足可以被丟棄。如果丟棄,在需要的時候,會再次計算它們的值。
NSCache的屬性與方法
//設置緩存占用的內存最大值。默認為0,內存大小沒有限制。這并不是一個嚴格的限制,最終取決于緩存策略。
@property NSUInteger totalCostLimit;
//設置緩存可保存的對象數(shù)量。效果同上。
@property NSUInteger countLimit;
//設置是否自動舍棄那些內存已經被丟棄的對象。
@property BOOL evictsObjectsWithDiscardedContent;
//獲取與指定鍵關聯(lián)的對象
- (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以確保它們不會被內存管理系統(tǒng)立即丟棄。因此,必須跟蹤counter變量狀態(tài)。調用beginContentAccess方法使counter+1確保對象不被丟棄。當不再需要此對象時,調用endContentAccess方法使counter-1。 -(BOOL)isContentDiscarded方法返回此對象內存是否已經丟棄。