iOS開(kāi)發(fā) - 關(guān)于沙盒機(jī)制(sandBox)

** 引言 **

iOS中的沙盒機(jī)制是一種安全體系, 規(guī)定了應(yīng)用程序只能在為該改程序創(chuàng)建的文件中讀取文件,不可以去其它地方訪(fǎng)問(wèn)尤溜,此區(qū)域被成為沙盒。
所有的非代碼文件都要保存在自己的沙盒中汗唱,例如圖像宫莱,圖標(biāo),聲音哩罪,映像授霸,屬性列表,文本文件等际插。


I. 沙盒機(jī)制


  1. 每個(gè)應(yīng)用程序都有自己的存儲(chǔ)空間
  2. 應(yīng)用程序不能翻過(guò)自己的圍墻去訪(fǎng)問(wèn)別的存儲(chǔ)空間的內(nèi)容
  3. 應(yīng)用程序請(qǐng)求的數(shù)據(jù)都要通過(guò)權(quán)限檢測(cè)碘耳,假如不符合條件的話(huà),不會(huì)被放行框弛。

通過(guò)這張圖只能從表層上理解sandbox是一種安全體系辛辨,應(yīng)用程序的所有操作都要通過(guò)這個(gè)體系來(lái)執(zhí)行,其中核心內(nèi)容是:sandbox對(duì)應(yīng)用程序執(zhí)行各種操作的權(quán)限限制功咒。


II. 目錄結(jié)構(gòu)


因?yàn)閼?yīng)用的沙盒機(jī)制愉阎,應(yīng)用只能在以下幾個(gè)目錄下讀寫(xiě)文件。默認(rèn)情況下力奋,每個(gè)沙盒含有3個(gè)文件夾:Documents, Librarytmp:

每個(gè)應(yīng)用的沙盒目錄都是相似的榜旦,主要包含圖中所示的4個(gè)目錄:

1、MyApp.app

① 存放內(nèi)容
該目錄包含了應(yīng)用程序本身的數(shù)據(jù)景殷,包括資源文件和可執(zhí)行文件等溅呢。程序啟動(dòng)以后澡屡,會(huì)根據(jù)需要從該目錄中動(dòng)態(tài)加載代碼或資源到內(nèi)存,這里用到了lazy loading的思想咐旧。

② 整個(gè)目錄是只讀的
為了防止被篡改驶鹉,應(yīng)用在安裝的時(shí)候會(huì)將該目錄簽名。非越獄情況下铣墨,該目錄中內(nèi)容是無(wú)法更改的室埋;在越獄設(shè)備上如果更改了目錄內(nèi)容,對(duì)應(yīng)的簽名就會(huì)被改變伊约,這種情況下蘋(píng)果官網(wǎng)描述的后果是應(yīng)用程序?qū)o(wú)法啟動(dòng)姚淆,我沒(méi)實(shí)踐過(guò)。

③ 是否會(huì)被iTunes同步

2屡律、Documents

① 存放內(nèi)容
我們可以將應(yīng)用程序的數(shù)據(jù)文件保存在該目錄下腌逢。不過(guò)這些數(shù)據(jù)類(lèi)型僅限于不可再生的數(shù)據(jù),可再生的數(shù)據(jù)文件應(yīng)該存放在Library/Cache目錄下超埋。

② 是否會(huì)被iTunes同步

3搏讶、Documents/Inbox

① 存放內(nèi)容
該目錄用來(lái)保存由外部應(yīng)用請(qǐng)求當(dāng)前應(yīng)用程序打開(kāi)的文件。
比如我們的應(yīng)用叫A霍殴,向系統(tǒng)注冊(cè)了幾種可打開(kāi)的文件格式媒惕,B應(yīng)用有一個(gè)A支持的格式的文件F,并且申請(qǐng)調(diào)用A打開(kāi)F来庭。由于F當(dāng)前是在B應(yīng)用的沙盒中吓笙,我們知道,沙盒機(jī)制是不允許A訪(fǎng)問(wèn)B沙盒中的文件巾腕,因此蘋(píng)果的解決方案是講F拷貝一份到A應(yīng)用的Documents/Inbox目錄下面睛,再讓A打開(kāi)F。

② 是否會(huì)被iTunes同步

4尊搬、Library

① 存放內(nèi)容
蘋(píng)果建議用來(lái)存放默認(rèn)設(shè)置或其它狀態(tài)信息叁鉴。

② 是否會(huì)被iTunes同步
是,但是要除了Caches子目錄外

5佛寿、Library/Caches

① 存放內(nèi)容
主要是緩存文件幌墓,用戶(hù)使用過(guò)程中緩存都可以保存在這個(gè)目錄中。前面說(shuō)過(guò)冀泻,Documents目錄用于保存不可再生的文件常侣,那么這個(gè)目錄就用于保存那些可再生的文件,比如網(wǎng)絡(luò)請(qǐng)求的數(shù)據(jù)弹渔。鑒于此胳施,應(yīng)用程序通常還需要負(fù)責(zé)刪除這些文件。

② 是否會(huì)被iTunes同步

6肢专、Library/Preferences

① 存放內(nèi)容
應(yīng)用程序的偏好設(shè)置文件舞肆。我們使用NSUserDefaults寫(xiě)的設(shè)置數(shù)據(jù)都會(huì)保存到該目錄下的一個(gè)plist文件中焦辅,這就是所謂的寫(xiě)道plist中!

② 是否會(huì)被iTunes同步

7椿胯、tmp

① 存放內(nèi)容
各種臨時(shí)文件筷登,保存應(yīng)用再次啟動(dòng)時(shí)不需要的文件。而且哩盲,當(dāng)應(yīng)用不再需要這些文件時(shí)應(yīng)該主動(dòng)將其刪除前方,因?yàn)樵撃夸浵碌臇|西隨時(shí)有可能被系統(tǒng)清理掉,目前已知的一種可能清理的原因是系統(tǒng)磁盤(pán)存儲(chǔ)空間不足的時(shí)候廉油。

② 是否會(huì)被iTunes同步

iTunes在與iPhone同步時(shí)镣丑,備份所有的Documents和Library文件。

iPhone在重啟時(shí)娱两,會(huì)丟棄所有的tmp文件。


III. 代碼獲取文件夾路徑


獲取根目錄:


// 獲取根目錄
NSString *homePath = NSHomeDirectory();
NSLog(@"Home目錄:%@",homePath);

獲取Documents文件夾目錄:


NSArray *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsPath = [docPath objectAtIndex:0];
NSLog(@"Documents目錄:%@",documentsPath);

獲取Library文件夾目錄:


NSArray *libsPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libPath = [libsPath objectAtIndex:0];
NSLog(@"Library目錄:%@",libPath);

獲取Cache文件夾目錄:


NSArray *cacPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [cacPath objectAtIndex:0];
NSLog(@"Cache目錄:%@",cachePath);

獲取tmp目錄:


//temp目錄
NSString *tempPath = NSTemporaryDirectory();
NSLog(@"temp目錄:%@",tempPath);


IV. 沙盒讀寫(xiě)文件


向沙盒中寫(xiě)入文件:


NSArray *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsPath = [docPath objectAtIndex:0];

//寫(xiě)入文件
if (!documentsPath) {
    NSLog(@"目錄未找到");
}else {
    NSString *filePaht = [documentsPath stringByAppendingPathComponent:@"test.txt"];
    NSArray *array = [NSArray arrayWithObjects:@"Title",@"Contents", nil];
    [array writeToFile:filePaht atomically:YES];
}

向沙盒中寫(xiě)入文件:


//讀取文件
NSArray *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsPath = [docPath objectAtIndex:0];
NSString *readPath = [documentsPath stringByAppendingPathComponent:@"test.txt"];

// 寫(xiě)入的什么類(lèi)型的數(shù)據(jù) 就要用這個(gè)類(lèi)型來(lái)讀取
NSArray *fileContent = [[NSArray alloc] initWithContentsOfFile:readPath];
NSLog(@"文件內(nèi)容:%@",fileContent);


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末金吗,一起剝皮案震驚了整個(gè)濱河市十兢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌摇庙,老刑警劉巖旱物,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異卫袒,居然都是意外死亡宵呛,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)夕凝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宝穗,“玉大人,你說(shuō)我怎么就攤上這事码秉〈” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵转砖,是天一觀(guān)的道長(zhǎng)须鼎。 經(jīng)常有香客問(wèn)我,道長(zhǎng)府蔗,這世上最難降的妖魔是什么晋控? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮姓赤,結(jié)果婚禮上赡译,老公的妹妹穿的比我還像新娘。我一直安慰自己不铆,他們只是感情好捶朵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布蜘矢。 她就那樣靜靜地躺著,像睡著了一般综看。 火紅的嫁衣襯著肌膚如雪品腹。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天红碑,我揣著相機(jī)與錄音舞吭,去河邊找鬼。 笑死析珊,一個(gè)胖子當(dāng)著我的面吹牛羡鸥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播忠寻,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼惧浴,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了奕剃?” 一聲冷哼從身側(cè)響起衷旅,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纵朋,沒(méi)想到半個(gè)月后柿顶,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡操软,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年嘁锯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片聂薪。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡家乘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出藏澳,到底是詐尸還是另有隱情烤低,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布笆载,位于F島的核電站扑馁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏凉驻。R本人自食惡果不足惜腻要,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望涝登。 院中可真熱鬧雄家,春花似錦、人聲如沸胀滚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至顷编,卻和暖如春戚炫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背媳纬。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工双肤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钮惠。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓茅糜,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親素挽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蔑赘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容