iOS編程之緩存清除以及文件操作等

1,SDWebImage圖片緩存

這里簡單講解以下SDWebImage圖片緩存大小計算以及清理緩存的方法

  • 獲取圖片緩存大小:(前提是使用SDWebImage)
    有一點需要注意的是,mac中計算大小是以1000為單位,而不是1024
//計算緩存大小
NSUInteger size = [SDImageCache sharedImageCache].getSize;
double displaySize = size/ 1000.0 /1000.0;
NSLog(@"%.2f-------",displaySize);
  • 清除緩存:
[[SDImageCache sharedImageCache] clearDisk];
2,用NSFileManager自助計算緩存文件夾內的緩存

想要用NSFileManager清除緩存需要了解NSFileManager的基本操作,所以我們先講解一下這個類的一些基本方法

  • 2.1,用iOS的NSFileManager獲取文件夾信息,我這里以緩存文件夾為例
    需要注意的是,這個獲取的是文件夾信息,文件夾的大小和內部所有文件的大小是不一樣的,這里的文件大小不是我們需要的
  • 路徑
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
  • 獲取路徑下文件夾的屬性
NSDictionary *attrs = [fileManager attributesOfItemAtPath:cachePath error:&error];
NSLog(@"%@", attrs);
  • 打印結果是這樣的:
{
    NSFileOwnerAccountID : 501,
    NSFileSystemFileNumber : 6907377,
    NSFileExtensionHidden : 0,
    NSFileSystemNumber : 16777221,
    NSFileSize : 170,//這個文件夾大小不是我們需要的所有文件的大小
    NSFileGroupOwnerAccountID : 20,
    NSFilePosixPermissions : 493,
    NSFileCreationDate : 2017-01-08 11:07:18 +0000,
    NSFileType : NSFileTypeDirectory,
    NSFileGroupOwnerAccountName : staff,
    NSFileReferenceCount : 5,
    NSFileModificationDate : 2017-01-09 12:14:00 +0000
}
  • 2.2, 獲取文件夾下的直接內容:(為方便,我這里的文件夾路徑和2.1中一致)
NSArray *directContents = [fileManager contentsOfDirectoryAtPath:cachePath error:&error];
  • 2.3, 獲取文件夾下的所有內容,包括文件夾和文件:
NSArray *AllContents = [fileManager subpathsAtPath:cachePath];
  • 2.4,判斷該目錄下內容是否存在,存在的話:是文件夾還是文件:
BOOL isDirectory = NO;
BOOL exists = [fileManager fileExistsAtPath:fullPath isDirectory:&isDirectory];
  • 2.5, 通過以上的方法組合就可以求出一個文件夾下的所有文件的大小,思路如下:
  • 01, 首先用2.3方法找出文件夾下的所有內容
  • 02, 遍歷上面步驟中的所有內容, 然后用2.4方法判斷是否為文件
  • 03, 如果是文件,用2.1方法找出該文件的大小,然后進行累加計算即可
  • 具體方法如下:
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
__block NSInteger size = 0;
NSArray *AllContents = [fileManager subpathsAtPath:cachePath];
if (!error) {
    [AllContents enumerateObjectsUsingBlock:^(NSString *subPath, NSUInteger idx, BOOL * _Nonnull stop) {
        //注意屬性必須通過全路徑
        NSString *fullPath = [cachePath stringByAppendingPathComponent:subPath];

        BOOL isDirectory = NO;
        BOOL exists = [fileManager fileExistsAtPath:fullPath isDirectory:&isDirectory];
        
        if (!isDirectory) {
            //這個是文件,是文件的時候才需要計算大小
            NSInteger biteSize = [[fileManager attributesOfItemAtPath:fullPath error:nil][NSFileSize] integerValue];
            size += biteSize;
        }
    }];
    NSLog(@"%ld", (long)size);
}
3,用NSFileManager清除緩存
  • 清除緩存相對簡單,調用一個方法即可:
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
[fileManager removeItemAtPath:cachePath error:nil];
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容