NSCache的介紹

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方法返回此對象內存是否已經丟棄。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 『導言』 NSCache知識點補充 01.NSCache是專門用來進行緩存處理的(類似字典NSDictary) 0...
    隨心吧閱讀 333評論 0 0
  • 轉自:http://southpeak.github.io/blog/2015/02/11/nscache/?ut...
    RealSlimAlan閱讀 674評論 0 1
  • 應用場景: iOS中需要頻繁讀取的數(shù)據(jù),都可以用NSCache把數(shù)據(jù)緩存到內存中提高讀取性能。 正文: 一:定義 ...
    謝謝生活閱讀 7,464評論 6 14
  • 從三月份找實習到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,901評論 11 349
  • 忘記歷史意味著背叛,忘記歷史也意味著一種危險。 但有的時候,歷史沒有被忘記,但歷史讓人讀不懂。這樣的情況,也不是一...
    東語西言閱讀 448評論 1 1

友情鏈接更多精彩內容