OC快取 NSCache介紹

2021-07-12 00:15:09 字數 1090 閱讀 4752

nscache是蘋果官方提供的快取類,它的用法與nsmutabledictionary的用法很相似,在afnetworking中,使用它來作為快取。

nscache在系統發出低記憶體通知時,會自動刪減快取。在以下**中,不斷給nscache中填充nsdata,當大小在500m左右時,系統丟擲 received memory warning. 通知,之後從cache中獲取資料,發現cache為空。

nscache可以設定數量限制,通過countlimit與 totalcostlimit來限制cache的數量或者限制cost。當快取的數量超過countlimit,或者cost之和超過totalcostlimit,nscache會自動釋放部分快取。例子如下:

可以看到,cache中只保留了最新的30條記錄。

在第二個例子中,cache嚴格的按照lru規則,清理了超出限制的舊資料。但是在文件中說明,countlimit並不是乙個嚴格的限制,如果cache數量超出了limit,那麼cache中的物件有可能立刻被清理出去,或者稍後,或者永遠都不會被清理掉,而這個時機依賴於cache的實現細節。

在使用setobject:forkey:cost:方法時,cost值只在比較容易獲取到的時候才指定,若要通過複雜的計算來獲取cost值,那使用快取的意義就不大了。

nscache是執行緒安全的,在多執行緒操作中,不需要對cache加鎖。nscache的key只是對物件的strong引用,物件不需要實現nscopying協議,nscache也不會像nsdictionary一樣複製物件。

通常,使用nscache會結合nsdiscardablecontent協議,實現了這個協議的類需要在被引用之前,必須呼叫begincontentaccess來標記為可使用的,如果在使用之前沒有呼叫beigincontentaccess,那麼就會丟擲異常。在使用結束之後,呼叫endcontentaccess,來標記它為可以被釋放的。如果實現了nsdiscardablecontent協議的物件放入了nscache中,那麼,在清除它的時候,會呼叫discardcontentifpossible方法來判斷引用狀況,沒有引用,則銷毀。

使用absolute url作為key,將快取起來。在uiimageview類中,通過單例方式,獲取afimagecache的例項。**如下:

NSCache(快取處理)

nscache是專門用來進行快取處理的 nscache是蘋果官方提供的快取類,具體使用和nsdictionary類似,在afn和sdwebimage框架中被使用來管理快取 蘋果官方解釋nscache在系統記憶體很低時,會自動釋放物件 但模擬器不會釋放 建議 接收到記憶體警告時主動呼叫removeal...

OC類的介紹

類的本質 1,類也是個物件 其實類也是乙個物件,是class型別的物件,簡稱 類物件 class型別的定義 typedef struct objc class class 類名就代表著類物件,每個類只有乙個類物件 2,獲取類物件的2種方式 1 class c person class 2 perso...

Hibernate快取介紹

一般而言,orm的資料快取應包含如下幾個層次 1.事務級快取 transcation layer cache 3.分布式快取 cluster layer cache hibernate資料快取 cache 分為兩個層次,以hibernate語義加以區分,可分為 1.內部快取 session leve...