行動裝置 App在處理網路資源時,一般都會做離線緩衝處理,其中以圖片緩衝最為典型,其中很流行的離線緩衝架構為SDWebImage。
但是,離線緩衝會佔用手機儲存空間,所以緩衝清理功能基本成為資訊、購物、閱讀類app的標配功能。
今天介紹的離線緩衝功能的實現,主要分為快取檔案大小的擷取、清除快取檔案的實現。
1. 擷取快取檔案的大小
-( float )readCacheSize{NSString *cachePath = [NSSearchPathForDirectoriesInDomains (NSCachesDirectory , NSUserDomainMask , YES) firstObject];return [ self folderSizeAtPath :cachePath];}
由於快取檔案存在沙箱中,我們可以通過NSFileManager API來實現對快取檔案大小的計算。
// 遍曆檔案夾獲得檔案夾大小,返回多少 M- ( float ) folderSizeAtPath:( NSString *) folderPath{NSFileManager * manager = [NSFileManager defaultManager];if (![manager fileExistsAtPath :folderPath]) return 0 ;NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath :folderPath] objectEnumerator];NSString * fileName;long long folderSize = 0 ;while ((fileName = [childFilesEnumerator nextObject]) != nil ){//擷取檔案全路徑NSString * fileAbsolutePath = [folderPath stringByAppendingPathComponent :fileName];folderSize += [ self fileSizeAtPath :fileAbsolutePath];}return folderSize/( 1024.0 * 1024.0);}// 計算 單個檔案的大小- ( long long ) fileSizeAtPath:( NSString *) filePath{NSFileManager * manager = [NSFileManager defaultManager];if ([manager fileExistsAtPath :filePath]){return [[manager attributesOfItemAtPath :filePath error : nil] fileSize];}return 0;}
2. 清除緩衝
- (void)clearFile{NSString * cachePath = [NSSearchPathForDirectoriesInDomains (NSCachesDirectory , NSUserDomainMask , YES ) firstObject];NSArray * files = [[NSFileManager defaultManager ] subpathsAtPath :cachePath];//NSLog ( @"cachpath = %@" , cachePath);for ( NSString * p in files) {NSError * error = nil ;//擷取檔案全路徑NSString * fileAbsolutePath = [cachePath stringByAppendingPathComponent :p];if ([[NSFileManager defaultManager ] fileExistsAtPath :fileAbsolutePath]) {[[NSFileManager defaultManager ] removeItemAtPath :fileAbsolutePath error :&error];}}//讀取緩衝大小float cacheSize = [self readCacheSize] *1024;self.cacheSize.text = [NSString stringWithFormat:@"%.2fKB",cacheSize];}
以上所述是小編給大家介紹的IOS擷取快取檔案的大小並清除快取檔案的方法,希望對大家有所協助,如果大家有任何疑問請給我留言,小編會及時回複大家的。在此也非常感謝大家對雲棲社區網站的支援!