NSCache的介紹

NSCache是什么

NSCache對(duì)象是存儲(chǔ)鍵值對(duì)的可變集合,類似于NSDictionary。NSCache類提供一個(gè)編程接口用來添加和刪除對(duì)象,并根據(jù)緩存占用的大小和數(shù)量設(shè)置丟棄策略。

NSCache對(duì)象不同于其它可變集合:

  • NSCache類包含多種自動(dòng)淘汰策略,來確保緩存不會(huì)占用太多的系統(tǒng)內(nèi)存。如果其它程序需要內(nèi)存,緩存策略會(huì)刪除一些緩存,最小化其內(nèi)存占用。
  • NSCache是線程安全的,當(dāng)操作緩存時(shí)不用加鎖。
  • 和NSMutableDictionay不同的是,NSCache不會(huì)copy的集合中的鍵對(duì)象。

NSCache通常用來存儲(chǔ)臨時(shí)數(shù)據(jù),重用這些對(duì)象能夠提供性能優(yōu)勢(shì),因?yàn)椴槐乇辉俅斡?jì)算它們的值。然而,這些對(duì)象對(duì)于應(yīng)用程序并不重要,如果內(nèi)在不足可以被丟棄。如果丟棄,在需要的時(shí)候,會(huì)再次計(jì)算它們的值。

NSCache的屬性與方法
//設(shè)置緩存占用的內(nèi)存最大值。默認(rèn)為0,內(nèi)存大小沒有限制。這并不是一個(gè)嚴(yán)格的限制,最終取決于緩存策略。
@property NSUInteger totalCostLimit;   
//設(shè)置緩存可保存的對(duì)象數(shù)量。效果同上。
@property NSUInteger countLimit;
//設(shè)置是否自動(dòng)舍棄那些內(nèi)存已經(jīng)被丟棄的對(duì)象。
@property BOOL evictsObjectsWithDiscardedContent; 
//獲取與指定鍵關(guān)聯(lián)的對(duì)象
- (nullable ObjectType)objectForKey:(KeyType)key;
//在緩存中設(shè)置指定鍵名對(duì)應(yīng)的值
- (void)setObject:(ObjectType)obj forKey:(KeyType)key; 
//在緩存中設(shè)置指定鍵名對(duì)應(yīng)的值,并且指定該鍵值對(duì)的成本
- (void)setObject:(ObjectType)obj forKey:(KeyType)key cost:(NSUInteger)g;
//刪除緩存中指定鍵名的對(duì)象
- (void)removeObjectForKey:(KeyType)key;
//刪除緩存中的所有對(duì)象
- (void)removeAllObjects;
NSDiscardableContent

一個(gè)NSDiscardableContent對(duì)象的生命周期取決于counter變量。一個(gè)此對(duì)象是可清除的內(nèi)存塊,并用于跟蹤其內(nèi)存是否正在被其它對(duì)象使用。當(dāng)這塊內(nèi)存正在被使用或仍被需要,此對(duì)象的counter這是會(huì)>=1。當(dāng)這塊內(nèi)存將不被使用且可以被丟棄,counter=0.
當(dāng)counter=0時(shí),如果內(nèi)存緊張,此內(nèi)存塊可能會(huì)被丟棄。調(diào)用discardContentIfPossible方法來丟棄內(nèi)容,它將會(huì)釋放counter=0的內(nèi)存。
NSDiscardableContent對(duì)象默認(rèn)初始化counter變量=1以確保它們不會(huì)被內(nèi)存管理系統(tǒng)立即丟棄。因此,必須跟蹤counter變量狀態(tài)。調(diào)用beginContentAccess方法使counter+1確保對(duì)象不被丟棄。當(dāng)不再需要此對(duì)象時(shí),調(diào)用endContentAccess方法使counter-1。 - (BOOL)isContentDiscarded方法返回此對(duì)象內(nèi)存是否已經(jīng)丟棄。

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

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容