iOS - 沙盒機制(SandBox)和獲取沙盒路徑


 

iOSAPP可以在自己的沙盒里讀寫文件,但是,不可以訪問其他APP的沙盒。每一個APP都是一個信息孤島,相互是不可以進行通信的,唯獨可以通過URLScheme。沙盒里面的文件可以是照片、聲音文件、文本、屬性列表等。

沙盒機制簡介

沙盒簡述:

1,每一個APP都有一個存儲空間,就是沙盒。

2,APP之間不能相互通信。

3,沙盒根目錄結構:Documents、Library、temp。

 

簡述一下Documents、Library、temp的區別:

1,Documents:用於存儲用戶數據,iTunes備份和恢復的時候會包括此目錄,所以,蘋果建議將程序中建立的或在程序中瀏覽到的文件數據保存在該目錄下。

2,Library:包含兩個子目錄:Caches和Preferences。Caches用來存放用戶需要換成的文件。Preferences是APP的偏好設置,可以通過NSUserDefaults來讀取和設置。

3,tmp:用於存放臨時文件,這個可以放一些當APP退出后不再需要的文件。

 

打開模擬器沙盒方法

方法一:前往文件夾打開

/Users/ligang/Library/Application Support/iPhone Simulator/

直接在Finder->前往->前往文件夾,輸入上面的內容即可。記住將ligang換成你的電腦用戶名。

方法二:通過Finder一步步查找

模擬器上的APP的沙盒實在用戶目錄下的資源庫里面,但是資源庫是隱藏文件夾。所以查看沙盒之前,現將隱藏文件夾顯示出來。顯示隱藏文件的命令:

defaults write com.apple.finder AppleShowAllFiles -bool true

用心的童鞋會發現,隱藏隱藏文件的命令:

defaults write com.apple.finder AppleShowAllFiles -bool false

 

如何獲取Documents、Library、tmp的路徑?

獲取沙盒根目錄

獲取沙盒根目錄,直接調用NSHomeDirectory():

//獲取沙盒根目錄

NSString*directory=NSHomeDirectory();

NSLog(@"directory:%@",directory);

控制台輸出:  

2017-05-10 09:23:57.708447+0800 VideoClip[408:70903] directory:/var/mobile/Containers/Data/Application/CC60BE19-540C-43BE-9F9C-293A2A630C9C

 

這個是真機的路徑,大家有時間的話可以看看模擬器的根目錄路徑。

獲取Documents路徑

獲取Documents路徑如下:

//獲取Documents路徑

NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

NSString*path=[pathsobjectAtIndex:0];

NSLog(@"path:%@",path);

控制台輸出:    

2017-05-10 09:23:57.708754+0800 VideoClip[408:70903] path:/var/mobile/Containers/Data/Application/Documents

獲取Documents文件夾目錄,第一個參數是說明獲取Doucments文件夾目錄,第二個參數說明是在當前應用沙盒中獲取。  

 

獲取Library路徑

//獲取Library路徑

NSArray*paths=NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES);

NSString*path=[pathsobjectAtIndex:0];

NSLog(@"path:%@",path);

控制台輸出:  

2017-05-10 09:23:57.708754+0800 VideoClip[408:70903] path:/var/mobile/Containers/Data/Application/Library

 

獲取Caches路徑

//獲取Caches路徑

NSArray*paths=NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);

NSString*path=[pathsobjectAtIndex:0];

NSLog(@"path:%@",path);

控制台輸出:  

2017-05-10 09:23:57.708754+0800 VideoClip[408:70903] path:/var/mobile/Containers/Data/Application/Library/Caches

 

獲取tmp路徑

NSString*tmp=NSTemporaryDirectory();

NSLog(@"tmp:%@",tmp);

控制台輸出:  

2017-05-10 09:23:57.709190+0800 VideoClip[408:70903] tmp:/private/var/mobile/Containers/Data/Application/CC60BE19-540C-43BE-9F9C-293A2A630C9C/tmp/

 

以上是iOS開發中獲取沙盒路徑的方法。

 

 

 

iOS 簡單的存儲和讀取 本地圖片 適用於 用戶頭像

//存儲圖片到本地沙盒
+ (void)saveImage:(UIImage *)image{
    NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndexWithCheck:0];
    NSString *imageName = [NSString stringWithFormat:@"%@HeadImage",[USERDEFAULT objectForKey:USERNAME]];
    NSString *filePath = [[documentDirectory stringByAppendingPathComponent:@"HeadImages"] stringByAppendingString:imageName];
    NSData *data = UIImageJPEGRepresentation(image, 0.1);
    [data writeToFile:filePath atomically:YES];
}

 

//獲取本地沙盒存儲的圖片
+ (UIImage *)loadImage{
    NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndexWithCheck:0];
    NSString *imageName = [NSString stringWithFormat:@"%@HeadImage",[USERDEFAULT objectForKey:USERNAME]];
    NSString *filePath = [[documentDirectory stringByAppendingPathComponent:@"HeadImages"] stringByAppendingString:imageName];
    NSFileManager *fm = [NSFileManager defaultManager];
    if ([fm fileExistsAtPath:filePath]) {
        NSData * data = [NSData dataWithContentsOfFile:filePath];
        UIImage *image = [UIImage imageWithData:data];
        return image;
    }
    return nil;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM