iOS---沙盒存儲

每個iOS應用都有自己的應用沙盒(應用沙盒就是文件系統(tǒng)目錄)缩滨,與其他文件系統(tǒng)隔離翘县。應用必須待在自己的沙盒里帜羊,其他應用不能訪問該沙盒。沙盒下的目錄如下:

Application:

存放程序源文件,上架前經過數字簽名箫柳,上架后不可修改

Documents: 保存應?運行時生成的需要持久化的數據,iTunes同步設備時會備份該目錄手形。例如,游戲應用可將游戲存檔保存在該目錄

tmp:

?保存應?運行時所需的臨時數據,使?完畢后再將相應的文件從該目錄刪除。應用 沒有運行時,系統(tǒng)也可能會清除該目錄下的文件悯恍。iTunes同步設備時不會備份該目錄库糠。

Library/Caches:

?保存應用運行時?成的需要持久化的數據,iTunes同步設備時不會備份 該目錄。?一般存儲體積大涮毫、不需要備份的非重要數據瞬欧,比如網絡數據緩存存儲到Caches下

Library/Preference:

?保存應用的所有偏好設置,如iOS的Settings(設置) 應?會在該目錄中查找應?的設置信息罢防。iTunes同步設備時會備份該目錄.// 偏好設置是專門用來保存應用程序的配置信息的比如保存用戶名艘虎、密碼、字體大小等設置, 一般情況不要再偏好設置中保存其他數據

// 如果利用系統(tǒng)的偏好設置來存儲數據, 默認就是存儲在Preferences文件夾下面的

// 偏好設置會將所有的數據保存到同一個文件中

NSUserDefaults* defalts = [NSUserDefaults standardUserDefaults];

// 保存數據(如果設置數據之后沒有同步, 會在將來某一時間點自動將數據保存到Preferences文件夾下面)

[defalts setObject:@"123" forKey:@"key"];

// 讓NSUserDefaults立刻保存數據 注意:UserDefaults設置數據時咒吐,不是立即寫入野建,而是根據時間戳定時地把緩存中的數據寫入本地磁盤。所以調用了set方法之后數據有可能還沒有寫入磁盤應用程序就終止了恬叹。出現以上問題候生,可以通過調用synchornize方法強制寫入

[defalts synchronize];//如果要立刻保存就需要這行代碼


下面為關于沙盒的代碼小總結:


#import<Foundation/Foundation.m>

/*

文件管理

*/

@interface ZBFile : NSObject

/*

* @brief 應用程序主目錄

* @return 主目錄路徑

*/

+ (NSString *)fileHomeDirectory;

/*

* @brief? Resource目錄

* @return Resource目錄路徑

*/

+ (NSString *)fileResourceDirectory;

/*

* @brief Docunmets目錄

* @return Docunmets目錄路徑

*/

+ (NSString *)fileDocumentsDirectory;

/*

* @brief Caches 目錄

* @return Caches 目錄路徑

*/

+ (NSString *)fileCachesDirectory;

/*

* @brief tmp目錄

* @return tmp目錄路徑

*/

+ (NSString *)fileTemporaryDirectory;

/**

* @brief Resource + path路徑.

*

* @param path 相對路徑.

*

* @return Resource + path完整路徑.

*/

+ (NSString *)fileResourceDirectory:(NSString *)path;

/**

* @brief Documents + path路徑.

*

* @param path 相對路徑.

*

* @return Documents + path完整路徑.

*/

+ (NSString *)fileDocumentsDirectory:(NSString *)path;

/**

* @brief Caches + path路徑.

*

* @param path 相對路徑.

*

* @return Caches + path完整路徑.

*/

+ (NSString *)fileCachesDirectory:(NSString *)path;

/**

* @brief tmp + path路徑.

*

* @param path 相對路徑.

*

* @return tmp + path完整路徑.

*/

+ (NSString *)fileTempDirectory:(NSString *)path;

/**

* @brief 創(chuàng)建path目錄或文件.

*

* @param path 目錄或文件路徑.

*

* @return 是否創(chuàng)建成功.

*/

+ (BOOL)fileCreateDirectory:(NSString *)path;

/**

* @brief 目錄或文件是否存在.

*

* @param path 目錄或文件路徑.

*

* @return 目錄或文件是否存在.

*/

+ (BOOL)fileExistAtPath:(NSString *)path;

/**

* @brief 保存data到path目錄.

*

* @param path 保存目錄.

* @param data 待保存數據.

*

* @return 寫文件是否成功.

*/

+ (BOOL)fileWriteAtPath:(NSString *)path data:(NSData *)data;

/**

* @brief 刪除目錄或文件.

*

* @param path 待刪除目錄或文件.

*

* @return 目錄或文件是否刪除成功.

*/

+ (BOOL)fileDelete:(NSString *)path;

/**

* @brief 查詢path目錄子文件名稱.

*

* @param path 待查詢目錄.

*

* @return 子文件名稱列表

*/

+ (NSArray *)fileSubFileNames:(NSString *)path;

/**

* @brief 拷貝fromPath文件或目錄到toPath目錄下.

*

* @param fromPath 源文件或目錄.

* @param toPath 保存文件或目錄路徑.

*

* @return 是否拷貝成功.

*/

+ (BOOL)fileCopy:(NSString *)fromPath toPath:(NSString *)toPath;

/**

*? @brief 獲取數據庫所有文件大小

*

*? @return 文件大小 單位M

*

*/

+ (float)getAllDataBaseSize;

/**

*

*

*? @brief? 清除所有緩存

*/

+(void)removeAllCaches;

/**

*

*? @brief? 獲取所有的緩存大小

*

*? @return 緩存大小 單位為M

*/

+(float)getAllCaches;

/**

*

*? @brief? 獲取單個文件大小

*

*? @return 大小 單位為M

*/

+ (long long)fileSizeAtPath:(NSString *)filePath;

/**

*

*? @brief? 獲取某一目錄大小

*

*? @return 大小 單位為M

*/

+(long long)filesSizeAtPath:(NSString *)filePath;

/**

*

*

*? @brief? 清除所有創(chuàng)建的文件

*/

+ (void)removeAll;

@end

-----------------------------------------------------------------------

#import "ZBFile.h"

@implementation ZBFile

#pragma mark----應用程序主目錄路徑

+ (NSString *)fileHomeDirectory{

NSString* homeDir = NSHomeDirectory();

return homeDir;

}

#pragma mark----Resource目錄路徑

+ (NSString *)fileResourceDirectory{

NSString* resDir = [[NSBundle mainBundle]resourcePath];

return resDir;

}

#pragma mark--- Documents目錄路徑.

+ (NSString *)fileDocumentsDirectory{

NSString* docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];

return docDir;

}

#pragma mark---Caches目錄路徑

+ (NSString *)fileCachesDirectory{

NSString* cachDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];

return cachDir;

}

#pragma mark--- tmp目錄路徑

+ (NSString *)fileTemporaryDirectory{

NSString* temDir = NSTemporaryDirectory();

return temDir;

}

#pragma mark--- Resource + path完整路徑.

+ (NSString *)fileResourceDirectory:(NSString *)path{

NSString* returnStr = [[ZBFile fileResourceDirectory]stringByAppendingPathComponent:path];

return returnStr;

}

#pragma mark --Documents + path完整路徑

+ (NSString *)fileDocumentsDirectory:(NSString *)path{

NSString* returnStr = [[ZBFile fileDocumentsDirectory]stringByAppendingPathComponent:path];

return returnStr;

}

#pragma mark -- Caches + path完整路徑

+ (NSString *)fileCachesDirectory:(NSString *)path{

NSString* returnStr = [[ZBFile fileCachesDirectory]stringByAppendingPathComponent:path];

return returnStr;

}

#pragma mark -- tmp + path完整路徑

+ (NSString *)fileTempDirectory:(NSString *)path{

NSString* returnStr = [[ZBFile fileTemporaryDirectory]stringByAppendingPathComponent:path];

return returnStr;

}

#pragma mark -- 是否存在

+ (BOOL)fileExistAtPath:(NSString *)path

{

NSFileManager* fileManager = [NSFileManager defaultManager];

return [fileManager fileExistsAtPath:path];

}

#pragma mark -- 是否創(chuàng)建成功

+ (BOOL)fileCreateDirectory:(NSString *)path{

NSFileManager* fileManager = [NSFileManager defaultManager];

NSError* error;

return [fileManager createDirectoryAtPath:path withIntermediateDirectories:NO attributes:nil error:&error];

}

#pragma mark -- 是否寫入

+ (BOOL)fileWriteAtPath:(NSString *)path data:(NSData *)data{

return [data writeToFile:path atomically:YES];

}

#pragma mark---是否刪除

+ (BOOL)fileDelete:(NSString *)path{

NSFileManager* fileManager = [NSFileManager defaultManager];

NSError* error;

return [fileManager removeItemAtPath:path error:&error];

}

#pragma mark--查詢path目錄子文件名稱

+ (NSArray *)fileSubFileNames:(NSString *)path{

NSFileManager* fileManager = [NSFileManager defaultManager];

NSError* error;

return [fileManager contentsOfDirectoryAtPath:path error:&error];

}

#pragma mark--拷貝fromPath文件或目錄到toPath目錄下

+ (BOOL)fileCopy:(NSString *)fromPath toPath:(NSString *)toPath{

NSFileManager* fileManager = [NSFileManager defaultManager];

NSError* error;

return [fileManager copyItemAtPath:fromPath toPath:toPath error:&error];

}

#pragma mark----獲取數據庫所有文件大小

+ (float)getAllDataBaseSize{

long long folderSize= 0;

folderSize = [ZBFile filesSizeAtPath:[ZBFile fileTemporaryDirectory]] + [ZBFile filesSizeAtPath:[ZBFile fileCachesDirectory]] +[ZBFile filesSizeAtPath:[ZBFile fileResourceDirectory]] +[ZBFile filesSizeAtPath:[ZBFile fileDocumentsDirectory]];

return folderSize;

}

#pragma mark----獲取目錄大小--

+(long long)filesSizeAtPath:(NSString *)filePath{

NSFileManager* fileManager = [NSFileManager defaultManager];

NSEnumerator *childFilesEnumerator = [[fileManager subpathsAtPath:filePath] objectEnumerator];

NSString* fileName;

long long folderSize = 0;

while ((fileName = [childFilesEnumerator nextObject]) != nil){

NSString* fileAbsolutePath = [filePath stringByAppendingPathComponent:fileName];

folderSize += [ZBFile fileSizeAtPath:fileAbsolutePath];

}

return folderSize/(1024.0*1024.0);

}

#pragma mark----獲取單個文件大小

+ (long long)fileSizeAtPath:(NSString *)filePath{

NSFileManager* manager = [NSFileManager defaultManager];

if ([manager fileExistsAtPath:filePath]){

return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];

}

return 0;

}

#pragma mark----獲取所有緩存大小-單位M

+(float)getAllCaches{

long long folderSize= 0;

folderSize = [ZBFile filesSizeAtPath:[ZBFile fileCachesDirectory]];

return folderSize;

}

#pragma mark----某一目錄下的文件

+ (void)removeDirCaches:(NSString *)path{

NSFileManager *manager = [NSFileManager defaultManager];

NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath:path] objectEnumerator];

NSString* fileName;

while ((fileName = [childFilesEnumerator nextObject]) != nil){

NSString* fileAbsolutePath = [path stringByAppendingPathComponent:fileName];

[manager removeItemAtPath:fileAbsolutePath error:NULL];

}

}

#pragma mark----清除所有緩存

+(void)removeAllCaches{

[ZBFile removeDirCaches:[ZBFile fileCachesDirectory]];

}

+ (void)removeAll{

[ZBFile removeDirCaches:[ZBFile fileDocumentsDirectory]];

[ZBFile removeDirCaches:[ZBFile fileResourceDirectory]];

[ZBFile removeDirCaches:[ZBFile fileCachesDirectory]];

[ZBFile removeDirCaches:[ZBFile fileTemporaryDirectory]];

}

@end

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市绽昼,隨后出現的幾起案子唯鸭,更是在濱河造成了極大的恐慌,老刑警劉巖绪励,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肿孵,死亡現場離奇詭異唠粥,居然都是意外死亡疏魏,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門晤愧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來大莫,“玉大人,你說我怎么就攤上這事官份≈焕澹” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵舅巷,是天一觀的道長羔味。 經常有香客問我,道長钠右,這世上最難降的妖魔是什么赋元? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上搁凸,老公的妹妹穿的比我還像新娘媚值。我一直安慰自己,他們只是感情好护糖,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布褥芒。 她就那樣靜靜地躺著,像睡著了一般嫡良。 火紅的嫁衣襯著肌膚如雪锰扶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天寝受,我揣著相機與錄音少辣,去河邊找鬼。 笑死羡蛾,一個胖子當著我的面吹牛漓帅,可吹牛的內容都是我干的。 我是一名探鬼主播痴怨,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼忙干,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了浪藻?” 一聲冷哼從身側響起捐迫,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爱葵,沒想到半個月后施戴,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡萌丈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年赞哗,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辆雾。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡肪笋,死狀恐怖,靈堂內的尸體忽然破棺而出度迂,到底是詐尸還是另有隱情藤乙,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布惭墓,位于F島的核電站坛梁,受9級特大地震影響,放射性物質發(fā)生泄漏腊凶。R本人自食惡果不足惜划咐,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一毅人、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尖殃,春花似錦丈莺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至器躏,卻和暖如春俐载,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背登失。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工遏佣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人揽浙。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓状婶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親馅巷。 傳聞我的和親對象是個殘疾皇子膛虫,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內容

  • 27、ViewController的didReceiveMemoryWarning是在什么時候調用的钓猬?默認的操作是...
    煙雨平生花飛舞閱讀 575評論 0 1
  • iPhone手機開發(fā)稍刀,沙盒分為主要的4個文件夾:Documents、Library/Caches敞曹、Library/...
    ACMango閱讀 296評論 0 2
  • 《江城子·菏澤元宵夜》 元宵月皎繞指柔账月,路徑幽,孤芳守澳迫。建華有情局齿,故可留江郎。征程營運調度處纲刀,獨不見项炼,仰空樓。 齊...
    羽君訣閱讀 268評論 0 7
  • 我畫不出你的眼睛輕輕將所有淚吮干的眼 我尋不著你的蹤跡揮劍狂舞風塵之上 我多想抱著你不朽在 黎明到來之前
    文姬閱讀 373評論 0 1
  • 性能優(yōu)化 1 穩(wěn)定 2 擴展 3 性能 1 網絡性能 2 執(zhí)行性能 網絡性能 網絡性能優(yōu)化 面向對象的...
    Cyril丶閱讀 190評論 0 1