關(guān)于沙盒的

iOS應(yīng)用儲存分以下幾種:

一、沙盒基本機制

二逝嚎、plist儲存

三僻弹、偏好設(shè)置

四、NSKeydeArchiver歸檔


一并炮、沙盒基本機制(sandbox)

iOS系統(tǒng)相對于Android系統(tǒng)默刚,或者相對于Windows系統(tǒng)來說比較安全的原因很多,其中有一點就是蘋果推出的沙盒機制逃魄,每個應(yīng)用都有自己對應(yīng)的沙盒荤西,每個應(yīng)用程序之間不能相互訪問非本程序的沙盒,所以嗅钻,Apple相對于其他的系統(tǒng)來說比較安全皂冰,再是從內(nèi)存上來說相對于Windows來說也比較安全,Apple的應(yīng)用程序在內(nèi)存消耗過高時养篓,收到內(nèi)存警告不及時處理的話應(yīng)用軟件會自動退出秃流,而不想Windows系統(tǒng)一樣,中了病毒或者木馬會一直消耗內(nèi)存柳弄,知道內(nèi)存沒有了舶胀,OK,Down機碧注。恩嚣伐,可以這么,沙盒機制萍丐,讓iOS系統(tǒng)變得更安全轩端。

1、bundle

1.1 bundle路徑就是通常所說的應(yīng)用程序在手機里面的安裝路徑逝变,其就是一個目錄基茵,這個目錄就是main bundle奋构。這個目錄里面通常包含圖像、媒體資源拱层、編譯好的代碼弥臼、nib,文件等等根灯。

1.1.1 查看方法bundle径缅,可以通過itunes下載任意應(yīng)用,在Finder中找到下載的應(yīng)用烙肺,以歸檔的方式打開ipa包纳猪,系統(tǒng)會解壓出來一個文件夾,在文件夾中找到.app的文件茬高,這就是我們安裝在手機里的bundle兆旬,右鍵顯示包內(nèi)容可以查看bundle中的文件。

1.1.2 可以通過如下代碼獲取bundle怎栽,但是這個獲取模擬器在Mac上的路徑

[NSBundle mainBundle].bundlePath

2丽猬、沙盒

2.1、iOS系統(tǒng)下每個應(yīng)用都有自己對應(yīng)的沙盒熏瞄,每個沙盒之間都是相互獨立的脚祟,互不能訪問(沒有越獄的情況下)。正因為這樣的沙盒機制讓iOS的系統(tǒng)變得更安全强饮。

2.2由桌、獲取沙盒路徑的代碼

NSHomeDirectory()

2.3、沙盒中的結(jié)構(gòu)

沙盒的作用就是存儲數(shù)據(jù)邮丰,每個沙盒就相當于每個每個應(yīng)用的系統(tǒng)目錄行您。

2.3.1、沙盒中的內(nèi)部結(jié)構(gòu)如上圖所示

2.3.1.1剪廉、Documents 應(yīng)用程序在運行時生成的一些需要長久保存的數(shù)據(jù)(比如:游戲進度存檔娃循、應(yīng)用程序個人設(shè)置等等),通過 iTunes斗蒋、iCloud 備份時, 會備份這個目錄下的數(shù)據(jù). 此目錄下保存相對重要的數(shù)據(jù)捌斧。

2.3.1.2、Library/Caches 從網(wǎng)絡(luò)上下載的文件或者數(shù)據(jù)(如:音樂緩存泉沾、圖片緩存等)捞蚂,此目錄下的數(shù)據(jù)不會自動刪除,需要程序員手動清除改目錄下的數(shù)據(jù)跷究。iTunes姓迅、iCloud 備份時不會備份此目錄下的數(shù)據(jù).主要用于保存應(yīng)用在運行時生成的需要長期使用的數(shù)據(jù).一般用于存儲體積較大,不需要備份的非重要數(shù)據(jù)。

2.3.1.3、保存通過"偏好設(shè)置"寫入的數(shù)據(jù)队贱。設(shè)置應(yīng)用的一些功能會在該目錄中查找相應(yīng)設(shè)置的信息,iTunes色冀、iCloud備份時,會備份次目錄下的數(shù)據(jù)潭袱。該目錄由系統(tǒng)自動管理,通常用來儲存一些基本的應(yīng)用配置信息,比如賬號密碼,自動登錄等柱嫌。

2.3.1.4、保存應(yīng)用運行時產(chǎn)生的一些臨時數(shù)據(jù),應(yīng)用程序退出屯换,系統(tǒng)磁盤空間不夠,手機重啟時,都會自動清除該目錄的數(shù)據(jù)编丘。無需程序員手動清除該目錄中的數(shù)據(jù).iTunes、iCloud備份時,不會備份次目錄彤悔。

二嘉抓、plist儲存

保存在Document文件夾

1.1、利?NSSearchPathForDirectoriesInDomains方法在沙盒中尋在目錄

1.2晕窑、NSDocumentDirectory 要尋找的字典對象,也就是要搜索的目錄抑片,也可以查找NSCachesDirectory和NSPreferencePanesDirectory。

1.3杨赤、NSUserDomainMask 代表從用戶目錄下尋找

1.4敞斋、是否展開~ ,YES代表展開

1.5疾牲、如果為NO打印的結(jié)果為 ~/Documents 不是我們想要的

NSString *doc =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)[0];

1.6植捎、使用這個方法系統(tǒng)會判斷doc路徑后面是否有/,沒有會自動添加阳柔,如果有則不添加焰枢。

NSString *path = [doc stringByAppendingPathComponent:@"test.plist"];

1.7、保存數(shù)據(jù)

plist只能保存集中最基本的數(shù)據(jù)類型,就是writeToFile方法的對象才能保存在plist文件中

NSDictionary *dict = @{@"test1":@"test2"};[dict writeToFile:path atomically:YES];

1.8舌剂、讀取數(shù)據(jù)

NSDictionary *dictTest = [NSDictionary dictionaryWithContentsOfFile:path];?

三济锄、偏好設(shè)置

保存在Preference

1、iOS應(yīng)用都可以通過偏好設(shè)置來快速保存用戶登陸賬號霍转,密碼和登陸狀態(tài)等等信息荐绝。

2、蘋果提供了一個NSUserDefaults實例谴忧,通過它來存取偏好設(shè)置很泊。保存格式為plist文件格式。

3沾谓、使用偏好設(shè)置來保存數(shù)據(jù), 默認存儲在Preferences的文件夾下委造,偏好設(shè)置數(shù)據(jù)會將所有的數(shù)據(jù)都保存到Preferences的文件夾下的同一個plist文件中。

4均驶、使用偏好設(shè)置對數(shù)據(jù)進行保存, 它保存的時間是不確定的昏兆,會在將來某一時間自動將數(shù)據(jù)保存到Preferences文件夾下,如果需要即刻將數(shù)據(jù)存儲妇穴,使用[defaults synchronize]爬虱。

保存偏好設(shè)置數(shù)據(jù)

// 獲取NSUserDefaults對象NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];// 保存數(shù)據(jù)[defaults setObject:@"test" forKey:@"test"];// 讓數(shù)據(jù)立刻保存

[defaults synchronize];

####讀取偏好設(shè)置數(shù)據(jù)

// 獲取NSUserDefaults對象NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];// 讀取數(shù)據(jù)NSString *test = [defaults objectForKey:@"test"];

四隶债、NSKeydeArchiver歸檔

保存在Document文件夾

1、前面兩種方式只能保存plist支持的基本數(shù)據(jù)類型跑筝,那么要保存自定義的類對象死讹,蘋果提供了NSKeydeArchiver歸檔。

2曲梗、使用NSKeydeArchiver歸檔必須使被歸檔的類遵守NSCoding協(xié)議并且實現(xiàn)協(xié)議方法赞警。

Person.h

#import@interfacePerson :NSObject @property (nonatomic,copy)NSString *name;@property (nonatomic,assign)int age;@end

Person.m

#import"Person.h"@implementationPerson// 當一個對象要保存到文件中的時候回調(diào)用如下方法,所以重寫該方法虏两,說明保存該對象的時候要保存哪些屬性愧旦。- (void)encodeWithCoder:(NSCoder *)aCoder {[aCoder encodeObject:self.name forKey:@"name"];[aCoder encodeInteger:self.age forKey:@"age"];}// 當一個對象從文件中讀取的時候,系統(tǒng)會調(diào)用該方法定罢,重寫該方法- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder {if ([super init]) {self.name = [aDecoder decodeObjectForKey:@"name"];self.age = [aDecoder decodeIntForKey:@"age"];}returnself;}@end

ViewController.m

#import"ViewController.h"#import"Person.h"@interfaceViewController ()@end@implementationViewController- (void)viewDidLoad {[super viewDidLoad];// 保存數(shù)據(jù)//1.創(chuàng)建對象Person *p1 = [[Person alloc] init];p1.name =@"test";p1.age =20;//2.獲取文件路徑NSString *docPath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)[0];NSString *path=[docPath stringByAppendingPathComponent:@"person.test"];//3.將自定義的對象保存到文件中[NSKeyedArchiver archiveRootObject:p1 toFile:path];// 讀取數(shù)據(jù)Person *p2 =[NSKeyedUnarchiver unarchiveObjectWithFile:path];}- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.}@end

Tips:通過NSKeydeArchiver保存的數(shù)據(jù)的文件后綴名可以任意命名笤虫,并且通過plist保存的數(shù)據(jù)是直接顯示出來的,不安全祖凫。通過歸檔方法保存的數(shù)據(jù)在文件中打開是編碼琼蚯,更安全。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蝙场,一起剝皮案震驚了整個濱河市凌停,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌售滤,老刑警劉巖罚拟,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異完箩,居然都是意外死亡赐俗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門弊知,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阻逮,“玉大人,你說我怎么就攤上這事秩彤∈宥螅” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵漫雷,是天一觀的道長瓜富。 經(jīng)常有香客問我,道長降盹,這世上最難降的妖魔是什么与柑? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上价捧,老公的妹妹穿的比我還像新娘丑念。我一直安慰自己,他們只是感情好结蟋,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布脯倚。 她就那樣靜靜地躺著,像睡著了一般椎眯。 火紅的嫁衣襯著肌膚如雪挠将。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天编整,我揣著相機與錄音,去河邊找鬼乳丰。 笑死掌测,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的产园。 我是一名探鬼主播汞斧,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼什燕!你這毒婦竟也來了粘勒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤屎即,失蹤者是張志新(化名)和其女友劉穎庙睡,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體技俐,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡乘陪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了雕擂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啡邑。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖井赌,靈堂內(nèi)的尸體忽然破棺而出谤逼,到底是詐尸還是另有隱情,我是刑警寧澤仇穗,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布流部,位于F島的核電站,受9級特大地震影響仪缸,放射性物質(zhì)發(fā)生泄漏贵涵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宾茂。 院中可真熱鬧瓷马,春花似錦、人聲如沸跨晴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽端盆。三九已至怀骤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間焕妙,已是汗流浹背蒋伦。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留焚鹊,地道東北人痕届。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像末患,于是被迫代替她去往敵國和親研叫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

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