一、簡(jiǎn)介
- 每個(gè)iOS應(yīng)用都有自己的應(yīng)用沙盒(應(yīng)用沙盒就是文件系統(tǒng)目錄),與其他文件系統(tǒng)隔離。
- 應(yīng)用必須待在自己的沙盒里,其他應(yīng)用不能訪問(wèn)該沙盒
二、應(yīng)用沙盒目錄
Application應(yīng)用程序包:包含了
所有的資源文件和和可執(zhí)行文件,上架前經(jīng)過(guò)數(shù)字簽名,上架后不可修改-
Documents:保存
應(yīng)用程序本身運(yùn)行時(shí)產(chǎn)生的文件或者數(shù)據(jù),iCloud備份目錄,例如:游戲進(jìn)度、涂鴉軟件的繪圖- 注意點(diǎn):不要保存從網(wǎng)絡(luò)上下載的文件,否則會(huì)無(wú)法上架!
-
Library
- Caches:存放體積大又不需要備份的數(shù)據(jù)
- 保存臨時(shí)文件,"后續(xù)需要使用",例如:緩存圖片,離線數(shù)據(jù)(地圖數(shù)據(jù))
- 系統(tǒng)不會(huì)清理 cache 目錄中的文件
- 就要求程序開發(fā)時(shí),"必須提供 cache 目錄的清理解決方案"
- Preference:保存應(yīng)用的所有偏好設(shè)置,iCloud會(huì)備份設(shè)置信息
- 用戶偏好,使用 NSUserDefault 直接讀寫!
- 如果要想數(shù)據(jù)及時(shí)寫入磁盤,還需要調(diào)用一個(gè)同步方法
- Caches:存放體積大又不需要備份的數(shù)據(jù)
-
tmp:存放臨時(shí)文件,不會(huì)被備份,而且這個(gè)文件下的數(shù)據(jù)有可能隨時(shí)被清除的可能
- 保存臨時(shí)文件,"后續(xù)不需要使用"
- tmp 目錄中的文件,系統(tǒng)會(huì)自動(dòng)清理
- 重新啟動(dòng)手機(jī),tmp 目錄會(huì)被清空
- 系統(tǒng)磁盤空間不足時(shí),系統(tǒng)也會(huì)自動(dòng)清理
三、應(yīng)用沙盒目錄的常見(jiàn)獲取方式
**1、沙盒根目錄 **
NSString*home = NSHomeDirectory();
2、Documents目錄 2種方式
- 1.利用沙盒根目錄拼接”Documents”字符串
- 注意:不建議采用,因?yàn)樾掳姹镜牟僮飨到y(tǒng)可能會(huì)修改目錄名
NSString*home = NSHomeDirectory();
NSString*documents =[home stringByAppendingPathComponent:@"Documents"];
- 2.利用NSSearchPathForDirectoriesInDomains函數(shù)
// NSUserDomainMask 代表從用戶文件夾下找
// YES 代表展開路徑中的波浪字符“~”
NSArray*array = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO);
// 在iOS中,只有一個(gè)目錄跟傳入的參數(shù)匹配,所以這個(gè)集合里面只有一個(gè)元素
NSString*documents =[array objectAtIndex:0];
3、tmp臨時(shí)目錄
NSString *tmp = NSTemporaryDirectory();
4、Library/Caches 目錄
方式一:利用沙盒根目錄拼接”Caches”字符串
-
方式二:利用NSSearchPathForDirectoriesInDomains函數(shù)(將函數(shù)的第2個(gè)參數(shù)改為:NSCachesDirectory即可)
NSString*documents =[[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, NO) objectAtIndex:0]];
> **5、Library/Preference 偏好設(shè)置**
+ 通過(guò)NSUserDefaults類存取該目錄下的設(shè)置信息
# 四、分類抽取,快速方法沙盒中的文件夾
+ 1、 NSString分類抽取
```objc
// 1、.h文件
#import <Foundation/Foundation.h>
@interface NSString (JP)
// 用于生成文件在caches目錄中的路徑
- (instancetype)cacheDir;
// 用于生成文件在document目錄中的路徑
- (instancetype)docDir;
// 用于生成文件在tmp目錄中的路徑
- (instancetype)tmpDir;
@end
// 2. .m實(shí)現(xiàn)文件
#import "NSString+JP.h"
@implementation NSString (JP)
- (instancetype)cacheDir
{
// 1.獲取caches目錄
NSString *path = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
// 2.生成絕對(duì)路徑
return [path stringByAppendingPathComponent:[self lastPathComponent]];
}
- (instancetype)docDir
{
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
return [path stringByAppendingPathComponent:[self lastPathComponent]];
}
- (instancetype)tmpDir
{
NSString *path = NSTemporaryDirectory();
return [path stringByAppendingPathComponent:[self lastPathComponent]];
}
@end
- 2、使用抽取分類:如:獲取caches文件夾下的abc.png圖片
NSString *filePath = [@"abc.png" cacheDir];