天天看點

iOS - OC NSCache 緩存前言1、NSCache 的使用

NSCache 是蘋果提供的一個專門用來做緩存的類,當記憶體 "不足" 或超過限制的時候,會自動清理緩存,使用時可以指定緩存的數量和成本。用法與 NSMutableDictionary 的用法很相似,在 AFNetworking 和 SDWebImage 中,都使用它來管理緩存。

<code>- (void)setObject:(id)obj forKey:(id)key cost:(NSUInteger)g;</code>

設定對象并指定 "成本",成本可以自行指定

例子:緩存圖檔

1、緩存 100 張圖檔

2、将圖檔的"寬 * 高"當作成本,圖像"像素",10M 當作緩存成本,無論緩存的多少張照片,隻要像素值超過 10M,就自動清理緩存圖像的時候,使用成本,比單純設定數量要科學!

NSCache 是線程安全的,在多線程操作中,不需要對 Cache 加鎖。

NSCache 的 Key 隻是做強引用,與可變字典不同,緩存對象不會對鍵名做 copy 操作,不需要實作 NSCopying 協定。

使用 NSCache 做緩存一定要保證能夠有恢複的辦法,這是能否使用 NSCache 做緩存的一個重要原則。

例如:imageCache 可以使用 NSCache ,而 downloadQueueCache 不能使用!

當超出限制之後,緩存會自動清理!緩存中的任何對象,都有可能被幹掉。

如果是圖像緩存,記憶體中沒有,會自動從沙盒加載。

如果操作被釋放,就沒有回複的管道!

這個是是否使用 NSCache 做緩存的一個重要原則,一定要保證能夠有恢複的辦法!

千萬不要清理 NSCache

一旦調用了 removeAllObjects,就無法給 cache 添加對象。

關于 NSCache 的記憶體管理,交給他自己就行!

SDWebImage 中存在同樣的問題,一旦記憶體警告,清理了記憶體之後,之後所有的圖檔都是從沙盒加載的。

繼續閱讀