iOS緩存清理功能的實(shí)現(xiàn)
MAR21ST,20162:31 PM
移動(dòng)應(yīng)用在處理網(wǎng)絡(luò)資源時(shí)均函,一般都會(huì)做離線緩存處理,其中以圖片緩存最為典型裁僧,其中很流行的離線緩存框架為SDWebImage。
但是,離線緩存會(huì)占用手機(jī)存儲(chǔ)空間躬络,所以緩存清理功能基本成為資訊休傍、購(gòu)物、閱讀類app的標(biāo)配功能占键。
今天介紹的離線緩存功能的實(shí)現(xiàn)昔善,主要分為緩存文件大小的獲取、刪除緩存文件的實(shí)現(xiàn)畔乙。
獲取緩存文件的大小
由于緩存文件存在沙箱中君仆,我們可以通過 NSFileManager API 來(lái)實(shí)現(xiàn)對(duì)緩存文件大小的計(jì)算。
計(jì)算單個(gè)文件大小
```objc
+(float)fileSizeAtPath:(NSString *)path{
NSFileManager *fileManager=[NSFileManager defaultManager];
if([fileManager fileExistsAtPath:path]){
long long size=[fileManager attributesOfItemAtPath:path error:nil].fileSize;
return size/1024.0/1024.0;
}
return 0;
}
```
計(jì)算目錄大小
```objc
+(float)folderSizeAtPath:(NSString *)path{
NSFileManager *fileManager=[NSFileManager defaultManager];
float folderSize;
if ([fileManager fileExistsAtPath:path]) {
NSArray *childerFiles=[fileManager subpathsAtPath:path];
for (NSString *fileName in childerFiles) {
NSString *absolutePath=[path stringByAppendingPathComponent:fileName];
folderSize +=[FileService fileSizeAtPath:absolutePath];
}
//SDWebImage框架自身計(jì)算緩存的實(shí)現(xiàn)
folderSize+=[[SDImageCache sharedImageCache] getSize]/1024.0/1024.0;
return folderSize;
}
return 0;
}
```
清理緩存文件
同樣也是利用NSFileManager API進(jìn)行文件操作牲距,SDWebImage框架自己實(shí)現(xiàn)了清理緩存操作返咱,我們可以直接調(diào)用。
+(void)clearCache:(NSString *)path{
NSFileManager *fileManager=[NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:path]) {
NSArray *childerFiles=[fileManager subpathsAtPath:path];
for (NSString *fileName in childerFiles) {
//如有需要牍鞠,加入條件咖摹,過濾掉不想刪除的文件
NSString *absolutePath=[path stringByAppendingPathComponent:fileName];
[fileManager removeItemAtPath:absolutePath error:nil];
}
}
[[SDImageCache sharedImageCache] cleanDisk];
}]