文藝求關(guān)注.png
- <h5>NSCache</h5>
- NSCache是專門用來進行緩存處理的
- <h5>NSCache簡單介紹</h5>
- 1-1.NSCache是蘋果官方提供的緩存類,具體使用和NSDictionary類似,在AFN和SDWebImage框架中被使用來管理緩存
- 1-2.蘋果官方解釋NSCache在系統(tǒng)內(nèi)存很低時,會自動釋放對象(但模擬器演示不會釋放)
- 建議:接收到內(nèi)存警告時主動調(diào)用removeAllObject方法釋放對象
- 1-3.NSCache是線程安全的,在多線程操作中,不需要對NSCache進行加鎖
- 1-4.NSCache的Key只是對對象進行Strong引用,不是copy
- <h5>補充--iOS開發(fā)中的- 磁盤緩存</h5>
- Documents:連接iTunes,做自動備份的,蘋果官方規(guī)定,不允許將緩存內(nèi)容放在此目錄下
- Library:
- Caches:專門用來處理緩存的,
- Preferences:偏好設(shè)置,用來保存一些賬號信息 - tmp:臨時存儲
- <h5>NSCache基本使用</h5>
@property (nonatomic, strong) NSCache *cache;
- (NSCache *)cache {
if (_cache == nil) {
_cache = [[NSCache alloc] init];
_cache.totalCostLimit = 5; //總成本數(shù)為5,如果發(fā)現(xiàn)存的數(shù)據(jù)超過總成本那么會自動回收之前的對象, ! ! 與下面cost配合使用
_cache.delegate = self; //開發(fā)中一般用不到,一般用于測試
// _cache.countLimit = 5; //設(shè)置最多可以緩存多少個數(shù)據(jù),
}
return _cache;
}
// 在storyboard中拉三個按鈕,分別修改修改名稱為:添加數(shù)據(jù)、檢查緩存、清理緩存,并拖線
// 添加數(shù)據(jù)
- (IBAction)addDataBtnClick:(id)sender {
// NSCache的Key只是對對象進行Strong引用,不是copy
// imageData放在外面,data是同一個對象,即一個對象加了10個強引用,他的總成本為1,不會回收處理
// NSData *imageData = [NSData dataWithContentsOfFile:@"/Users/Vincent/Desktop/互斥鎖.png"];
for (NSInteger i = 0; i < 10; i++) {
// imageData放for循環(huán)里面,創(chuàng)建了10個對象,他的總成本為10,會進行回收處理
NSData *imageData = [NSData dataWithContentsOfFile:@"/Users/Vincent/Desktop/互斥鎖.png"];
[self.cache setObject:imageData forKey:@(i) cost:2]; //與字典用法類似 //cost 與 totalCostLimit 配對使用,
NSLog(@"存數(shù)據(jù)%zd", i);
}
}
// 檢查數(shù)據(jù)
- (IBAction)chectDataBtnClick:(id)sender {
NSLog(@"++++++++++++++++++++++++++++++++");
for (NSInteger i = 0; i < 10; i++) {
NSData *data = [self.cache objectForKey:@(i)];
if (data) {
NSLog(@"取出數(shù)據(jù)%zd", i );
}
}
}
// 刪除數(shù)據(jù)
- (IBAction)removeDataBtnClick:(id)sender {
[self.cache removeAllObjects];
}
#pragma - NSCache代理方法
// 即將要回收對象的時候,調(diào)用該代理方法
- (void)cache:(NSCache *)cache willEvictObject:(id)obj {
NSLog(@"即將回收%zd", [obj length]);
}
關(guān)注一下又不會懷孕.png