ios開發中如何有效清除檔案快取?,ios開發清除緩衝
ios開發中如何有效清除檔案快取?在有一些應用中應該都會有一些緩衝是儲存在磁碟中的,然後應用也會去提供清除緩衝的按鈕,而且還會告訴你緩衝現在有多大。
那麼我們是如何去得到緩衝大小的呢,如何去清除? 首先我們要明確既然要得到緩衝的大小,那麼我們肯定需要去得到檔案的大小
但是這裡需要注意的是檔案夾本身是沒有檔案大小這個屬性的,可能會有疑問了,但是我右鍵可以查看,那個是通過計算檔案夾中
的檔案去計算出來的。在ios中我們想操縱檔案的話是需要去用到一個類的就是NSFileManager,我們如果直接去擷取檔案夾的大小是擷取
不到的,準備的說是NSFileSize對應的值不對,但是如果通過擷取檔案的大小是擷取的到的,如下所示
//擷取檔案管理者 NSFileManager * mgr = [NSFileManager defaultManager]; //擷取緩衝路徑 NSString * string = @"檔案路徑"; NSDictionary * attrs = [mgr attributesOfItemAtPath:string error:NULL]; NSLog(@"%@",attrs); //擷取檔案夾中的所有的直接內容 NSArray * contents = [mgr contentsOfDirectoryAtPath:string error:NULL];
我們可以給NSString增加一個分類去計算檔案夾的大小
-(NSInteger)fileSize{ NSFileManager * mgr = [NSFileManager defaultManager]; //判斷是否為檔案夾的一個標記 BOOL isDirectory = NO; //isDirectory傳入進去,取出的如果是YES就是檔案夾 BOOL exists = [mgr fileExistsAtPath:self isDirectory:&isDirectory]; //判斷檔案或者檔案夾存不存在 if(exists==NO) { return 0; } //如果是一個檔案夾,我們就去遍曆caches中的所有的內容包括直接和間接的內容 if(isDirectory) { NSArray * subPaths = [mgr subpathsAtPath:self]; NSInteger totalByteSize =0; for(NSString * subPath in subPaths) { //擷取全路徑 NSString * fullSubPath = [self stringByAppendingPathComponent:subPath]; //判斷是否為檔案 BOOL isDirectory = NO; //表示是檔案 if(isDirectory==NO) { totalByteSize+=[[mgr attributesOfItemAtPath:fullSubPath error:NULL][NSFileSize]integerValue]; } } return totalByteSize; } //如果是單個檔案就輸出檔案大小 else { return [[mgr attributesOfItemAtPath:self error:NULL][NSFileSize]integerValue]; }}
如果我們要去刪除某個檔案或者某個檔案夾,我們直接用檔案管理者對象的一個方法就可以了
NSString * str1 = @"檔案/檔案夾路徑"; [mgr removeItemAtPath:str1 error:NULL];