IOS 沙箱與清除緩衝,ios沙箱緩衝
SandBox,沙箱機制,是一種安全體系。我們所開發的每一個應用程式在裝置上會有一個對應的沙箱檔案夾,當前的程式只能在自己的沙箱檔案夾中讀取檔案,不能訪問其他應用程式的沙箱。在項目中添加的所有非代碼的資源,比片、聲音、屬性列表等都存在自己的沙箱中。此外,在程式運行中動態產生的或者從網路擷取的資料,如果要儲存,也都是儲存到沙箱中。
沙箱中的預設資料夾
(1)Documents:蘋果建議將程式中建立的或在程式中瀏覽到的檔案資料儲存在該目錄下,iTunes備份和恢複的時候會包括此目錄
(2)Library:儲存程式的預設設定或其它狀態資訊;
裡面又包含兩個檔案夾Caches和Preference;
Caches,存放快取檔案,iTunes不會備份此目錄
(3)tmp:提供一個即時建立臨時檔案的地方
擷取沙箱中的不同目錄
代碼
// JRSandBoxPath.h// Fmdb//// Created by jerei on 15-10-30.// Copyright (c) 2015年 jerei. All rights reserved.//#import <Foundation/Foundation.h>@interface JRSandBoxPath: NSObject// 擷取沙箱Document的檔案目錄+ (NSString *)getDocumentDirectory;// 擷取沙箱Library的檔案目錄+ (NSString *)getLibraryDirectory;// 擷取沙箱Library/Caches的檔案目錄+ (NSString *)getCachesDirectory;// 擷取沙箱Preference的檔案目錄+ (NSString *)getPreferencePanesDirectory;// 擷取沙箱tmp的檔案目錄+ (NSString *)getTmpDirectory;@end//// JRSandBoxPath.m// Fmdb//// Created by jerei on 15-10-30.// Copyright (c) 2015年 jerei. All rights reserved.//#import " JRSandBoxPath.h"@implementation JRSandBoxPath#pragma mark - 擷取沙箱Document的檔案目錄+ (NSString *)getDocumentDirectory{ return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];}#pragma mark - 擷取沙箱Library的檔案目錄+ (NSString *)getLibraryDirectory{ return [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];}#pragma mark - 擷取沙箱Library/Caches的檔案目錄+ (NSString *)getCachesDirectory{ return [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];}#pragma mark - 擷取沙箱Preference的檔案目錄+ (NSString *)getPreferencePanesDirectory{ return [NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, YES) lastObject];}#pragma mark - 擷取沙箱tmp的檔案目錄+ (NSString *)getTmpDirectory{ return NSTemporaryDirectory();}@end
清除緩衝
在開發的過程中,遇到有用的資料,會進行緩衝,當該資料不需要時,可以清除。在這裡整理了幾個方法,統計問價的大小,清除指定檔案,清除指定目錄下的全部檔案等。
代碼
// JRCleanCaches.h// Fmdb//// Created by jerei on 15-10-30.// Copyright (c) 2015年 jerei. All rights reserved.//#import <Foundation/Foundation.h>@interface JRCleanCaches : NSObject// 根據路徑返回目錄或檔案的大小+ (double)sizeWithFilePath:(NSString *)path;// 得到指定目錄下的所有檔案+ (NSArray *)getAllFileNames:(NSString *)dirPath;// 刪除指定目錄或檔案+ (BOOL)clearCachesWithFilePath:(NSString *)path;// 清空指定目錄下檔案+ (BOOL)clearCachesFromDirectoryPath:(NSString *)dirPath;@end//// JRCleanCaches.m// Fmdb//// Created by jerei on 15-10-30.// Copyright (c) 2015年 jerei. All rights reserved.//#import "JRCleanCaches.h"@implementation JRCleanCaches#pragma mark - 根據路徑返回目錄或檔案的大小+ (double)sizeWithFilePath:(NSString *)path{ // 1.獲得檔案夾管理者 NSFileManager *manger = [NSFileManager defaultManager]; // 2.檢測路徑的合理性 BOOL dir = NO; BOOL exits = [manger fileExistsAtPath:path isDirectory:&dir]; if (!exits) return 0; // 3.判斷是否為檔案夾 if (dir) { // 檔案夾, 遍曆檔案夾裡面的所有檔案 // 這個方法能獲得這個檔案夾下面的所有子路徑(直接\間接子路徑) NSArray *subpaths = [manger subpathsAtPath:path]; int totalSize = 0; for (NSString *subpath in subpaths) { NSString *fullsubpath = [path stringByAppendingPathComponent:subpath]; BOOL dir = NO; [manger fileExistsAtPath:fullsubpath isDirectory:&dir]; if (!dir) { // 子路徑是個檔案 NSDictionary *attrs = [manger attributesOfItemAtPath:fullsubpath error:nil]; totalSize += [attrs[NSFileSize] intValue]; } } return totalSize / (1024 * 1024.0); } else { // 檔案 NSDictionary *attrs = [manger attributesOfItemAtPath:path error:nil]; return [attrs[NSFileSize] intValue] / (1024.0 * 1024.0); }}#pragma mark - 得到指定目錄下的所有檔案+ (NSArray *)getAllFileNames:(NSString *)dirPath{ NSArray *files = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:dirPath error:nil]; return files;}#pragma mark - 刪除指定目錄或檔案+ (BOOL)clearCachesWithFilePath:(NSString *)path{ NSFileManager *mgr = [NSFileManager defaultManager]; return [mgr removeItemAtPath:path error:nil];}#pragma mark - 清空指定目錄下檔案+ (BOOL)clearCachesFromDirectoryPath:(NSString *)dirPath{ //獲得全部檔案數組 NSArray *fileAry = [JRCleanCaches getAllFileNames:dirPath]; //遍曆數組 BOOL flag = NO; for (NSString *fileName in fileAry) { NSString *filePath = [dirPath stringByAppendingPathComponent:fileName]; flag = [JRCleanCaches clearCachesWithFilePath:filePath]; if (!flag) break; } return flag;}@end
作者:傑瑞教育
出處:http://www.cnblogs.com/jerehedu/
著作權聲明:本文著作權歸煙台傑瑞教育科技有限公司和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。
技術諮詢: