NSCache
講解NSCache的基本使用,NSCache是Foundation框架提供的緩存類的實現,使用方式類似於可變字典,由於NSMutableDictionary的存在,很多人在實現緩存時都會使用可變字典,但NSCache在實現緩存功能時比可變字典更方便,最重要的是它是線程安全的,而NSMutableDictionary不是線程安全的,在多線程環境下使用NSCache是更好的選擇。
NSCache
NSCache的使用很方便,提供了類似可變字典的使用方式,但它比可變字典更適用於實現緩存:
- 最重要的原因爲NSCache是線程安全的,使用NSMutableDictionary自定義實現緩存時需要考慮加鎖和釋放鎖,NSCache已經幫我們做好了這一步。
- 其次,在內存不足時NSCache會自動釋放存儲的對象,不需要手動干預,如果是自定義實現需要監聽內存狀態然後做進一步的刪除對象的操作。
- 還有一點就是NSCache的鍵key不會被複制,所以key不需要實現NSCopying協議。
上面講解的三點就是NSCache相比於NSMutableDictionary實現緩存功能的優點,在需要實現緩存時應當優先考慮使用NSCache。
NSCache釋放緩存
程序進入後臺後,可以發現NSCacheDelegate的回調函數觸發了,所以,當程序進入後臺,NSCache對象會自動釋放所有的對象。如果在模擬器上模擬內存警告,也可以發現NSCache會釋放所有的對象。所以NSCache刪除緩存中的對象會在以下情形中發生:
- NSCache緩存對象自身被釋放;
- 手動調用removeObjectForKey:方法;
- 手動調用removeAllObjects;
- 緩存中對象的個數大於countLimit,或,緩存中對象的總cost值大於totalCostLimit;
- 程序進入後臺後;
- 收到系統的內存警告。