iOS快取清理功能的實現
移動應用在處理網路資源時,一般都會做離線快取處理,其中以圖片快取最為典型,其中很流行的離線快取框架為SDWebImage。
但是,離線快取會佔用手機儲存空間,所以快取清理功能基本成為資訊、購物、閱讀類app的標配功能。
今天介紹的離線快取功能的實現,主要分為快取檔案大小的獲取、刪除快取檔案的實現。
獲取快取檔案的大小
由於快取檔案存在沙箱中,我們可以通過NSFileManager API來實現對快取檔案大小的計算。
計算單個檔案大小
+(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; }
計算目錄大小
+(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框架自身計算快取的實現 folderSize+=[[SDImageCache sharedImageCache] getSize]/1024.0/1024.0; return folderSize; } return 0; }
清理快取檔案
同樣也是利用NSFileManager API進行檔案操作,SDWebImage框架自己實現了清理快取操作,我們可以直接呼叫。
+(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]; }
實現效果:
相關文章
- 實現vue 的keep-alive快取功能VueKeep-Alive快取
- iOS 除SDWebImage之外清理記憶體中快取iOSWeb記憶體快取
- linux清理快取Linux快取
- 清理 Conda 快取和 Pip 快取快取
- pbootcms模板自動清理runtime快取,自動清理快取boot快取
- 如何定期清理DNS快取?清理DNS快取有什麼用?DNS快取
- 清理C盤快取,清理電腦C盤快取垃圾的操作步驟快取
- localstorage實現帶過期時間的快取功能快取
- linux docker 清理快取LinuxDocker快取
- docker清理快取命令Docker快取
- win10如何清理flash快取_win10清理fiash player快取的方法Win10快取
- 清理電腦快取垃圾快取
- windwos清理圖示快取快取
- Win10如何清理照片快取 win10系統清理照片快取的步驟Win10快取
- 基於Java+SpringBoot+Mysql實現的快遞櫃寄取快遞系統功能實現十JavaSpring BootMySql
- 基於Java+SpringBoot+Mysql實現的快遞櫃寄取快遞系統功能實現三JavaSpring BootMySql
- 基於Java+SpringBoot+Mysql實現的快遞櫃寄取快遞系統功能實現四JavaSpring BootMySql
- 基於Java+SpringBoot+Mysql實現的快遞櫃寄取快遞系統功能實現八JavaSpring BootMySql
- Win10系統實現自動清理垃圾檔案磁碟快取的方法Win10快取
- PbootCMS快取如何清理runtime資料夾下經常滿怎麼辦?清理快取的方法boot快取
- 如何清理MAC電腦的DNS快取MacDNS快取
- iOS快取的總結iOS快取
- Laravel 路由快取檔案清理Laravel路由快取
- Python中pycharm如何清理快取?PythonPyCharm快取
- Privatus for Mac網頁快取清理Mac網頁快取
- SpringBoot快取管理(二) 整合Redis快取實現Spring Boot快取Redis
- Win10系統如何清理應用商店快取_win10清理應用商店快取的方法Win10快取
- Jtti:Centos清理快取的方法是什麼JttiCentOS快取
- PbootCMS模板自動清理runtime快取boot快取
- 伺服器快取怎麼清理伺服器快取
- 使用ConcurrentHashMap實現快取HashMap快取
- 使用RxJava實現快取RxJava快取
- win10怎麼清理網路快取_win10電腦怎麼清理dns快取Win10快取DNS
- Win10 1909系統自帶的清理快取怎樣使用 win10 1909清理快取的使用方法Win10快取
- 2020-11-05---idea快取和索引的清理Idea快取索引
- Spring @cacheable註解實現的快取Spring快取
- Laravel 實現二級快取 提高快取的命中率和細粒化快取 keyLaravel快取
- 伺服器DNS快取怎麼清理伺服器DNS快取
- 實現AVPlayer離線快取快取