iOS 應(yīng)用沙盒

一、簡(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è)同步方法
  • 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];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容