iOS 數(shù)據(jù)持久化-沙盒機(jī)制介紹(一)

什么是沙盒機(jī)制晤柄?

我們手中的iphone/ipad設(shè)備上包含著閃存(flash memory)傍念,它的功能和一個(gè)硬盤功能等價(jià)围辙。當(dāng)設(shè)備斷電后數(shù)據(jù)依然能夠被保存下來吉捶,應(yīng)用程序可以把數(shù)據(jù)文件保存到閃存上夺鲜,并且讀取它們皆尔。

但是,需要注意的是币励,我們所開發(fā)的應(yīng)用程序是無法訪問整個(gè)閃存的慷蠕,因?yàn)殚W存上面會(huì)專門有一部分給我們,這一部分就是屬于我們開發(fā)的整個(gè)應(yīng)用程序的沙盒(sandbox)了食呻。

iOS系統(tǒng)下流炕,每個(gè)應(yīng)用都只能看到自己的沙盒,這就防止對(duì)其他應(yīng)用程序的數(shù)據(jù)文件進(jìn)行讀寫活動(dòng)仅胞。就像我們的應(yīng)用程序也能夠看見一些系統(tǒng)擁有的高級(jí)別目錄每辟,但是卻無法進(jìn)行任何的寫入操作。

沙盒目錄:

AppName.app目錄:這是應(yīng)用程序的程序包目錄干旧,包含應(yīng)用程序的本身渠欺。由于應(yīng)用程序必須經(jīng)過簽名,所以您在運(yùn)行時(shí)不能對(duì)這個(gè)目錄中的內(nèi)容進(jìn)行修改椎眯,否則可能會(huì)使應(yīng)用程序無法啟動(dòng)挠将。

Documents目錄:應(yīng)用會(huì)將數(shù)據(jù)存儲(chǔ)在這個(gè)文件夾里,但是基于NSUserDefaults 的首選項(xiàng)設(shè)置除外编整;

Library目錄:基于NSUserDefaults的首選項(xiàng)設(shè)置存儲(chǔ)在 Library/Preferences 文件夾中舔稀,且Library下面有Preferences和Caches目錄;

tmp目錄:供應(yīng)用存儲(chǔ)臨時(shí)文件闹击,當(dāng)iOS設(shè)備進(jìn)行同步操作時(shí)镶蹋,iTunes并不會(huì)備份這個(gè)文件夾的文件,但是在不需要這些文件的時(shí)候赏半,應(yīng)用需要?jiǎng)h除tmp中的這些文件贺归,以免占用文件系統(tǒng)空間;

沙盒目錄

Documents目錄

由于iOS中應(yīng)用的數(shù)據(jù)存儲(chǔ)是沙盒機(jī)制断箫,因此讀取和寫入文件拂酣,我們需要調(diào)用C函數(shù) “NSSearchPathForDirectoriesInDomains()”來查找各種目錄,(這個(gè)C函數(shù)可以基于Mac OS X平臺(tái)的Cocoa共享)

如檢索Documents目錄路徑的代碼:

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

NSString *pathDirectory = [paths objectAtIndex:0];

第一個(gè)常量NSDocumentDirectory表示我們正在查找目錄的路徑仲义,

第二個(gè)常量NSUserDomainMask表明我們希望將搜索限制在應(yīng)用的沙盒內(nèi)婶熬;(在Mac OS X中,此常量表示我們希望該函數(shù)查看用戶的主目錄埃撵,因此才會(huì)有這個(gè)命名赵颅;)

返回的paths是一個(gè)數(shù)組,為什么位于索引0就是我們需要的Documents目錄暂刘?因?yàn)槊恳粋€(gè)應(yīng)用只有一個(gè)Documents目錄饺谬,因此只有一個(gè)目錄符合這個(gè)條件;接下來谣拣,我們可以為剛才檢索到的目錄pathDirectory的結(jié)尾加一個(gè)字符串來創(chuàng)建一個(gè)文件名募寨,如下:

//注意是stringByAppendingPathComponent族展,不要拼錯(cuò)。

NSString *filename = [pathDirectory stringByAppendingPathComponent:@"data.txt"];

這個(gè)時(shí)候我們得到的filename字符串就可以進(jìn)行創(chuàng)建拔鹰、讀取仪缸、寫入文件了。


Library目錄:

這個(gè)目錄下有兩個(gè)子目錄:

Preferences 目錄:包含應(yīng)用程序的偏好設(shè)置文件列肢。您不應(yīng)該直接創(chuàng)建偏好設(shè)置文件恰画,而是應(yīng)該使用NSUserDefaults類來取得和設(shè)置應(yīng)用程序的偏好.iOS的Settings(設(shè)置)應(yīng)用會(huì)在該目錄中查找應(yīng)用的設(shè)置信息。iTunes同步設(shè)備時(shí)會(huì)備份該目錄例书。

Caches 目錄:用于存放應(yīng)用程序?qū)S玫闹С治募辔荆4鎽?yīng)用程序再次啟動(dòng)過程中需要的信息【霾桑可創(chuàng)建子文件夾》匕拢可以用來放置您希望被備份但不希望被用戶看到的數(shù)據(jù)树瞭。該路徑下的文件夾,除Caches以外爱谁,都會(huì)被iTunes備份晒喷。

1.獲取Library的目錄路徑

NSString *libDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];

2.獲取Caches目錄路徑

NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];


tmp目錄:

可以用NSTemporaryDirectory()的Foundation函數(shù)返回一個(gè)字符串,該字符串包含到應(yīng)用臨時(shí)目錄的完整路徑访敌。 同上凉敲,在結(jié)尾附上文件名就可以創(chuàng)建指向該目錄下的文件路徑了。

NSString *tmpPath = NSTemporaryDirectory();

NSString *temFile = [tmpPath stringByAppendingPathComponent:@"tempFile.txt"];


AppName.app目錄

獲取應(yīng)用程序程序包中資源寺旺,如:獲取本地txt文件中的內(nèi)容

NSString *path = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"txt"];

NSString *data = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

下一篇:iOS 數(shù)據(jù)持久化-四種存儲(chǔ)方式(二)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末爷抓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子阻塑,更是在濱河造成了極大的恐慌蓝撇,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陈莽,死亡現(xiàn)場(chǎng)離奇詭異渤昌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)走搁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門独柑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人私植,你說我怎么就攤上這事忌栅。” “怎么了兵琳?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵狂秘,是天一觀的道長(zhǎng)骇径。 經(jīng)常有香客問我,道長(zhǎng)者春,這世上最難降的妖魔是什么破衔? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮钱烟,結(jié)果婚禮上晰筛,老公的妹妹穿的比我還像新娘。我一直安慰自己拴袭,他們只是感情好读第,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拥刻,像睡著了一般怜瞒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上般哼,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天吴汪,我揣著相機(jī)與錄音,去河邊找鬼蒸眠。 笑死漾橙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的楞卡。 我是一名探鬼主播霜运,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蒋腮!你這毒婦竟也來了淘捡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤徽惋,失蹤者是張志新(化名)和其女友劉穎案淋,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體险绘,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡踢京,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宦棺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瓣距。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡右冻,死狀恐怖自赔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情玻墅,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布逻杖,位于F島的核電站奋岁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏荸百。R本人自食惡果不足惜闻伶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望够话。 院中可真熱鬧蓝翰,春花似錦、人聲如沸女嘲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欣尼。三九已至爆雹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間愕鼓,已是汗流浹背顶别。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拒啰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓完慧,卻偏偏與公主長(zhǎng)得像谋旦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子屈尼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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

  • 前言:突然想學(xué)習(xí)一下册着,沙盒,看了那么多博客脾歧,我四處的搜集一下總結(jié)一下甲捏,為了以后方便學(xué)習(xí),留存一篇整合的文章鞭执。 一司顿、...
    麥穗0615閱讀 12,236評(píng)論 5 28
  • 沙盒機(jī)制 出于安全考慮,iPhone對(duì)于安裝在上面的應(yīng)用程序有所限制兄纺,這個(gè)限制就是應(yīng)用程序只能在為該改程序創(chuàng)建的文...
    Joker_King閱讀 13,211評(píng)論 1 15
  • iOS開發(fā)之沙盒機(jī)制(SandBox)詳細(xì)講解了沙盒的一些機(jī)制大溜。在開發(fā)中,我們需要對(duì)沙盒進(jìn)行操作估脆,所以我們需要獲取...
    小灬博閱讀 3,767評(píng)論 1 4
  • iOS沙盒機(jī)制 沙盒機(jī)制 不好意思,我又一次來到了你們的世界,其實(shí)我是拒絕的,但是我的無法忍受內(nèi)心的躁動(dòng)!額我TM...
    iOSDevVicky閱讀 1,987評(píng)論 0 12
  • 終于明白很多道理钦奋,明白是明白,但要在等待中才會(huì)懂得,懂得等不到的東西付材,也不要去期盼朦拖,就像不去考驗(yàn)人性,但雖...
    馬冬梅的向日葵閱讀 105評(píng)論 2 2