前言
今天去面試了, 面試官遞給了我一個筆記本電腦."來, 試著把這個賣給我"于是我就把本本夾在腋下, 跑出大廈, 騎著我的電動車回家去了.最后, 他還是給我來電話了,"馬上把電腦送回來!","給我2000塊, 它就是你的了".
沙盒路徑.jpeg
介紹
每一個APP都有一個存儲空間,就是沙盒吆寨。APP之間不能相互通信啄清。沙盒根目錄結構:
Documents、Library掷贾、temp
想帅。-
iOS的沙盒
下面主要包含該以下三個文件:
Home.png
路徑是這樣的:
// 獲取沙盒主目錄路徑
NSString *homeDir = NSHomeDirectory();
// 模擬器下的路徑
/Users/apple/Library/Developer/CoreSimulator/Devices/12E868D1-2332-4215-B25E-3D5C8E3D1B07/data/Containers/Data/Application/3AE2AB9E-053B-41BF-B3D0-688F96A0D2F1
// 真機下的路徑
/var/mobile/Containers/Data/Application/8194D1EB-4026-49F6-ADAD-458355533828
// 應用的標識再往下就是沙盒了.系統(tǒng)生成.
(3AE2AB9E-053B-41BF-B3D0-688F96A0D2F1),
(8194D1EB-4026-49F6-ADAD-458355533828)
*注:每次編譯代碼會生成新的沙盒
, 注意是編譯不是啟動,所以模擬器
或者真機
運行你每次運行所得到的沙盒路徑
都是不一樣,就是上面提到的標識符不一樣,正式版app
真機的話啟動殺死,不會生成新的沙盒.
一博脑、Documents
// 獲取Documents目錄路徑
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
-
A 此文件夾是默認備份的,備份到iCloud
注:iCloud的備份叉趣,會通過Wi-Fi每天自動備份用戶iOS設備疗杉。
1.app的home目錄下的所有東西都會被備份蚕礼,除了應用Bundle本身、緩存目錄和temp目錄朝聋。
2.已購買的音樂冀痕、應用、書籍言蛇、Camera Roll、設備設置吨拗、主屏幕劝篷、App組織民宿、消息、鈴聲也都會被備份。
3.由于備份通過無線進行华望,并且為每個用戶存儲在iCloud中赖舟,應用需最小化自己存儲的數(shù)據(jù)數(shù)量夸楣。
4.大文件會延長備份時間,并且消耗用戶的可用iCloud空間石洗。
-
B大文件要做 非備份設置(如視頻) 審核的時候會被拒:
// 非備份設置代碼如下
// 需要導入
#include <sys/xattr.h>
- (BOOL)addShipBackUpAttributeToUrl:(NSString *)url {
NSURL *itemUrl = [NSURL URLWithString:url];
const char *filePath = [[itemUrl path] fileSystemRepresentation];
const char* attrName = "com.apple.MobileBackup";
u_int8_t attrValue = 1;
int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
return result == 0;
}
-
C此目錄儲存規(guī)則
關鍵數(shù)據(jù)
用戶創(chuàng)建的數(shù)據(jù)讲衫,或者不能重新生成的數(shù)據(jù)涉兽。
應該存放在<Application_Home>/Documents目錄下篙程,并且不應該標記為"do not backup"屬性虱饿。
關鍵數(shù)據(jù)在低存儲空間時也會保留触趴,而且會被iCloud或iTunes備份雕蔽。
-
D經(jīng)常存儲的一些東西
1.APP的數(shù)據(jù)庫表.
2.必要的一些圖標本地緩存.
3.重要的plist文件,如當前登錄人的信息.
二批狐、Library
-
里面包括兩個文件夾
Library.png
// 獲取Library的目錄路徑
NSString *libDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
-
A嚣艇、Caches
儲存規(guī)則
// 獲取Caches目錄路徑
NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
緩存數(shù)據(jù)
可以重新下載或生成的數(shù)據(jù)食零,而且沒有這些數(shù)據(jù)也不會妨礙用戶離線使用應用的功能贰谣。
緩存數(shù)據(jù)應該保存在<Application_Home>/Library/Caches目錄下吱抚。
緩存數(shù)據(jù)在設備低存儲空間時可能會被刪除,iTunes或iCloud不會對其進行備份秘豹。
系統(tǒng)的緩存都放在這個文件夾下面(主要是網(wǎng)路).
當訪問網(wǎng)絡時系統(tǒng)自動會把訪問的url,以數(shù)據(jù)庫的方式存放在此目錄下面.
Caches.png
其中一個數(shù)據(jù)庫的內容:
url.png
Snapshots默認文件夾
// 系統(tǒng)截圖文件夾, 我們沒有權限訪問
Snapshots
.png
-
B、Preferences(默認備份的)
NSUserDefaults
就是默認存放在此文件夾下面,如下代碼
// 獲取Preferences目錄路徑
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *preferences = [[paths firstObject] stringByAppendingString:@"/Preferences"];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"有毒的程序猿" forKey:@"firstName"];
[defaults setInteger:100 forKey:@"age"];
[defaults synchronize];
// 這里NSUserDefaults 是以key - value的形式存儲為.plist文件.
// 在這不得不多說一下[defaults synchronize]的作用.
// 其實可以不調用,文件也可以正常存儲,不過就是異步的.
// [defaults synchronize] 起到了立刻儲存的作用.
Preferences.png
三、tmp
- 臨時文件夾(系統(tǒng)會不定期刪除里面的文件)
// 獲取tmp目錄路徑
NSString *tmpDir = NSTemporaryDirectory();
應用需要寫到本地存儲怎炊,內部使用的臨時數(shù)據(jù)廓译,但不需要長期保留使用。
臨時數(shù)據(jù)應該保存在<Application_Home>/tmp目錄非区。
系統(tǒng)可能會清空該目錄下的數(shù)據(jù)征绸,iTunes或iCloud也不會對其進行備份俄占。
應用在不需要使用這些數(shù)據(jù)時缸榄,應該盡快地刪除臨時數(shù)據(jù)甚带,以避免浪費用戶的存儲空間佳头。
四、SystemData
- 新加入的一個文件夾, 存放系統(tǒng)的一些東西,暫時沒研究其用法,有興趣的同學可以研究其儲存規(guī)則.