NSCache是一個類似於集合的容器,即快取。它儲存key-value對,這一點類似於NSDictionary類。
利用他可以解決一些記憶體緊張導致的問題。
AFN,SDWebImage都是用NSCache來解決快取問題
NSCache 不Copy Key
NSDictionary
NSCache的key 沒有遵循
- (void)setObject:(ObjectType)anObject forKey:(KeyType <NSCopying>)aKey;複製程式碼
NSCache
- (void)setObject:(ObjectType)obj forKey:(KeyType)key; // 0 cost複製程式碼
NSCache 執行緒安全
- NSCache是執行緒安全的,我們可以在不同的執行緒中新增、刪除和查詢快取中的物件,而不需要鎖定快取區域。
NSCache 自動刪除
- 預設500MB記憶體限制
- countLimit:數量限制
- totalCostLimit:cost限制(cost物件佔用的位元組數)
countLimit,totalCostLimit是不精確的
- evictsObjectsWithDiscardedContent 快取是否自動廢棄內容已經被廢棄的物件
evictsObjectsWithDiscardedContent 和
來控制物件是否會被自動移除的機制,但是這可能只會讓你碰到更多的問題。
NSCacheDelegate
@optional
- (void)cache:(NSCache *)cache willEvictObject:(id)obj;複製程式碼
例子
Example:
NSCache *cache = [[NSCache alloc] init];
cache.delegate = self;
cache.countLimit = 10;
NSURL *url = [[NSBundle mainBundle] URLForResource:@"1" withExtension:@"pdf"];
for (int i = 0; i < 10000000; i++) {
NSData *data = [NSData dataWithContentsOfURL:url];
[cache setObject:data forKey:[NSString stringWithFormat:@"%d",i]];
}複製程式碼
你會發現記憶體佔用一隻在200MB維持,無論我們儲存了多少物件。
打個廣告嘿嘿
最近寫了個開源圖表框架
github.com/JunyiXie/XJ…
覺得不錯的話可以給我個star
當然也歡迎issue!
程式碼貢獻!