NSCache
- 專門用來做緩存處理的
- objectForKey(和字典用法很像)
簡介
- NSCache是蘋果官方提供的緩存類,具體使用和NSMutableDictionary類似,在AFN和SDWebImage框架中被使用來管理緩存
- 蘋果官方解釋NSCache在系統內存很低的時候,會自動釋放對象,建議:接收到內存警告的時候主動調用removeAllObject方法釋放對象
- NSCache是線程安全的,在多線程操作中,不需要對NSCache加鎖
- NSCache只是對Key進行Strong引用,不是拷貝
重要屬性
- name:名稱
- delegate:設置代理
- totalCostLimit:緩存空間的最大總成本,超出上限會自動回收對象,默認值為0,表示沒有限制,配合setObject:forKey:const:使用的
- countLimit:能夠緩存的對象的最大數量,默認值為0,表示沒有限制
- evictsObjectsWithDiscardedContent:標識緩存是否回收廢棄的內容
重要方法
- setObject:forKey:在緩存中設置指定鍵名對應的值,0成本
- setObject:forKey:const:
- removeObjectForKey:刪除緩存中指定鍵名的對象
- removeAllObjects:刪除緩存中所有的對象
NSCache基本使用
- 創建一個NSCache屬性,懶加載
- 設置緩存的總成本totalConstLimit,如果超過了總成本,那么該對象內部會開啟一個回收過程(先把之前的對象刪除,存儲后面的數據)
- 設置緩存的總數量countLimit,數量和成本沒有關系了,如果同時設置totalConstLimit,那么以最小的為準。
- 設置代理(開發中用不到,是用來做調試的,當內部開啟一個回收過程的時候調用)
- 存數據
- dataWithContentsOfFile:
- [self.cache setObjec:forKey:] 成本為0
- setObject:forKey:const:
- const:單位成本,有相對意義,沒有絕對意義,是相對于總成本的
- 取數據
- [self.cache objectForKey:]
- 判斷data是否有值
NSCache的應用
- 多圖下載改善:用NSCache代替字典
- 定義NSCache屬性NSCache *images
- 懶加載 _images = [[NSCache alloc]init]
- 其他地方就不需要改了