目錄
1、NSCache的作用
2、NSCache的屬性
3、NSCache的代理實現
作用:NSCache是蘋果官方提供的的緩存類,具體使用是和NSDictionary很相似的,在AFNetworking和SDWebImage第三方框架中被用作管理緩存。
之前和大家分享過的SDWebImage中提到過NSCache傳送門
1、NSCache作為一個對象其作用就是為了在內存很低的時候達到自動釋放對象的功能。
2、NSCache 是線程安全的,在多線程操作中,不需要對 Cache 加鎖。
3、NSCache 的 Key 只是做強引用,不需要實現 NSCopying 協議----如果你對NSCopying協議不是很了解,這個Demo可以幫到你傳送門
屬性 代理 展示
屬性/方法圖
NSCache的代理實現
簡單來講就是你家來客人了,但是你家只能住10個人,但是來了20個人,那怎么辦呢,你們家的管家(NSCache)就要清人了,那么清理的順序是什么呢?是按照先來后到的順序清理的,先清理先進來的人。下面代碼舉個例子....
#pragma mark IBActions (點擊事件xib)
/*增*/
- (IBAction)addCache:(UIButton *)sender {
for (int i = 1; i<10; i++) {
// 在緩存中設置指定鍵名對應的值,并且指定回收成本,以便進行計算存儲在緩存中對象的總成本,當出現內存警告或者超出總成本時,緩存就會進行刪除部分元素的操作。
NSString *str = [NSString stringWithFormat:@"在這里進行了存儲數據%@",@(i)];
[self.cache setObject:str forKey:@(i) cost:1
}
}
/*查*/
- (IBAction)checkCache:(UIButton *)sender {
NSLog(@"---------------------------------------------");
for (int i = 0; i < 10 ; i++) {
NSString *str = [self.cache objectForKey:@(i)];
if (str) {
NSLog(@"取出緩存中存儲的數據-----%@",@(i));
}
}
}
/*清理*/
- (IBAction)cleanCache:(UIButton *)sender {
[self.cache removeAllObjects];
NSLog(@"清理緩存");
}
#pragma mark - NSCacheDelegate
// 即將回收對象的時候進行調用,實現代理方法之前要遵守NSCacheDelegate協議。
- (void)cache:(NSCache *)cache willEvictObject:(id)obj{
NSLog(@"回收--------%@",obj);
}
控制臺輸出 ----->可以看到緩存清理的順序
控制臺輸出
以上是NSCache的介紹 屬性以及方法的實現,希望能幫到你。。如果您想更直觀看代碼...Demo在這傳送門