01、沙盒機(jī)制及簡(jiǎn)單對(duì)象的寫入和讀取

一渐排、什么是沙盒(SandBox)

1、每一個(gè)iOS應(yīng)用程序都會(huì)為自己創(chuàng)建一個(gè)文件系統(tǒng)目錄(相當(dāng)于一個(gè)文件夾)灸蟆,這就是沙盒驯耻。
這里需要注意的就是應(yīng)用程序每運(yùn)行一次,沙盒文件名稱就會(huì)發(fā)生改變炒考。
2可缚、應(yīng)用程序沙盒路徑
點(diǎn)擊桌面空白處==>點(diǎn)擊前往==>同時(shí)按住Alt鍵==>選中資源庫==>如下操作就可以找到該應(yīng)用程序的沙盒路徑了。




二斋枢、什么是沙盒機(jī)制

1帘靡、iOS中的沙盒機(jī)制是一種安全體系。
2瓤帚、它規(guī)定了應(yīng)用程序只能在為該應(yīng)用程序創(chuàng)建的文件夾(沙盒)內(nèi)訪問文件描姚,不可以訪問其他沙盒內(nèi)的內(nèi)容(在iOS8之后已經(jīng)部分開始訪問)涩赢。
3.所有的非代碼文件都保存在這個(gè)地方,比如圖片轩勘、聲音筒扒、屬性列表(plist)、sqlite數(shù)據(jù)庫和文本文件等绊寻。

特點(diǎn)
  • 每個(gè)應(yīng)用程序的活動(dòng)范圍都限定在自己的沙盒里
  • 不能隨意跨越自己的沙盒去訪問別的應(yīng)用程序沙盒中的內(nèi)容(在iOS8之后已經(jīng)部分開始訪問)花墩。
  • 應(yīng)用程序向外請(qǐng)求或接收數(shù)據(jù)都需要經(jīng)過權(quán)限認(rèn)證,例如定位澄步、麥克風(fēng)冰蘑、相冊(cè)等訪問權(quán)限。

三村缸、應(yīng)用程序的沙盒目錄

應(yīng)用程序的沙盒目錄下會(huì)有三個(gè)文件夾Documents祠肥、Library、tmp


  • Documents:????????????????????????????????????????????????????????????????????????保存應(yīng)用運(yùn)行時(shí)生成的需要持久化的數(shù)據(jù)王凑,iTunes不會(huì)自動(dòng)備份該目錄搪柑。
  • Library:存儲(chǔ)程序的默認(rèn)設(shè)置和其他狀態(tài)信息,iTunes會(huì)自動(dòng)備份該目錄索烹。
    Library/Caches:存放緩存文件工碾,iTunes不會(huì)備份此目錄,此目錄下的文件不會(huì)再應(yīng)用退出后刪除百姓,一般存放體積比較大渊额,不是特別重要的資源。
    Library/Preferences:保存應(yīng)用的所有偏好設(shè)置垒拢,iOS的settings應(yīng)用會(huì)在該目錄中查找應(yīng)用的設(shè)置信息旬迹,iTunes會(huì)自動(dòng)備份該目錄。
  • tmp:保存應(yīng)用運(yùn)行時(shí)的臨時(shí)數(shù)據(jù)求类,使用完畢后再將相應(yīng)的文件從該目錄刪除奔垦,應(yīng)用沒有運(yùn)行時(shí),系統(tǒng)也有可能清除該目錄下的文件尸疆,iTunes不會(huì)自動(dòng)備份該目錄椿猎。iphone重啟時(shí),該目錄下的文件會(huì)被刪除寿弱,為了安全起見犯眠,我們不會(huì)把數(shù)據(jù)存放到tem中。

四症革、如何獲取沙盒路徑筐咧、Documents目錄、 Library目錄、tmp目錄

  • 獲取沙盒路徑
//沙盒的主路徑
 NSString* homePathString=NSHomeDirectory();
  • 獲取Documents目錄

 //documents路徑
    //第一個(gè)參數(shù):要找尋的目標(biāo)文件
    //第二個(gè)參數(shù):查找的范圍(要找尋的目標(biāo)文件夾的父級(jí)文件夾)
    //第三個(gè)參數(shù):文件路徑是否展開
    NSArray* documentsArray=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString* documentPath=documentsArray.firstObject;
  • 獲取Library目錄
//Library路徑
    NSArray* libraryArray=NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
    NSString* libraryPath=libraryArray.firstObject;
    NSLog(@"libraryPath---%@",libraryPath);
    //caches路徑
    NSArray* cacheArray=NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString* cachesPath=cacheArray.firstObject;
    NSLog(@"cachesPath----%@",cachesPath);
    //preference路徑
    NSString* preferencePath=[libraryPath stringByAppendingString:@"/preferences"];
    NSLog(@"preferencePath----%@",preferencePath);
  • 獲取tmp目錄
 //tmp路徑
    NSString* tmpPath=NSTemporaryDirectory();

五量蕊、簡(jiǎn)單對(duì)象的讀取操作

1铺罢、NSString的寫入

#pragma mark------文件的寫入
-(void)writeToFile{
    //將一段字符串寫入documents文件夾中
    NSString* documentsPath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
    //在上面的路徑下創(chuàng)建一個(gè)文件路徑用來盛放文字
    NSString* txtPath=[documentsPath stringByAppendingPathComponent:@"string.txt"];
    //將文字寫入文件中,當(dāng)文字寫入文件的時(shí)候危融,如果文件不存在畏铆,系統(tǒng)會(huì)先創(chuàng)建,在寫入吉殃;如果存在辞居,直接寫入。新的內(nèi)容會(huì)將原來的內(nèi)容覆蓋掉
    NSString* contentStr=@"我是文本內(nèi)容";
    //寫入操作
    //第一個(gè)參數(shù):文件路徑
    //第二個(gè)參數(shù):原子性 YES:在寫入過程中會(huì)產(chǎn)生一個(gè)臨時(shí)文件蛋勺,當(dāng)內(nèi)容寫入完整的時(shí)候瓦灶,才會(huì)將內(nèi)容移動(dòng)到目標(biāo)文件中  NO:直接在目標(biāo)文件上操作,不產(chǎn)生臨時(shí)文件抱完,有可能損壞目標(biāo)文件
    //第三個(gè)參數(shù):字符串的編碼格式
    //第四個(gè)參數(shù):如果寫入出問題贼陶,這里會(huì)產(chǎn)生一個(gè)錯(cuò)誤日志,一般不需要錯(cuò)誤日志巧娱,直接賦值為nil
    //error對(duì)象用來保存錯(cuò)誤日志
    NSError* error=nil;
    BOOL isSuccsess=[contentStr writeToFile:txtPath atomically:YES encoding:(NSUTF8StringEncoding) error:&error];
    //只知道寫入的結(jié)果碉怔,沒有失敗過程描述
    if (isSuccsess) {
        NSLog(@"成功");
    }else{
        NSLog(@"失敗");
    }
    
}

運(yùn)行后會(huì)在documents文件下顯示此文本,在這里我們也可以將文本格式改為.plist禁添,它就會(huì)以xml格式存在撮胧。無論文本的后綴名是什么,我們都可以用文本編輯的方式打開老翘,所以有時(shí)候芹啥,png不一定是圖片,也有可能是文本或其他格式铺峭。


屏幕快照 2016-12-07 下午8.54.32.png

屏幕快照 2016-12-07 下午9.00.12.png

2墓怀、NSString的讀取


#pragma mark------文件的讀取
-(void)readFile{
    //要讀取文件的路徑
    NSString* docPath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
    NSString* txtPath=[docPath stringByAppendingPathComponent:@"string.txt"];
    //讀取文件
    NSString* readStr=[NSString stringWithContentsOfFile:txtPath encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"我是讀出來的---%@",readStr);
}

同理,其他類型的數(shù)據(jù)寫入和讀取的時(shí)候都是類似的卫键,只是方法不同而已傀履,下面是幾種數(shù)據(jù)寫入和讀取的方法


屏幕快照 2016-12-07 下午9.14.28.png

3、相對(duì)于以上幾種NSData會(huì)比較特殊些莉炉,例如圖片的寫入

#pragma mark------圖片的寫入
-(void)imgWriteToFile{
    //document路徑
    NSArray* pathArray=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    //在上面的路徑下創(chuàng)建一個(gè)文件路徑用來盛放圖片
    NSString* docPath=pathArray.firstObject;
    NSString* imgPath=[docPath stringByAppendingString:@"/333.png"];
    //圖片寫入
    //將圖片轉(zhuǎn)換為NSData類型
    UIImage* img=[UIImage imageNamed:@"10.JPG"];
    NSData* imgData=UIImageJPEGRepresentation(img, 1.0);
    [imgData writeToFile:imgPath atomically:YES];
    
}

屏幕快照 2016-12-07 下午9.20.24.png

以上幾種方法均要在ViewDidLoad中調(diào)用才可以實(shí)現(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末啤呼,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子呢袱,更是在濱河造成了極大的恐慌,老刑警劉巖翅敌,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件羞福,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蚯涮,警方通過查閱死者的電腦和手機(jī)治专,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門卖陵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人张峰,你說我怎么就攤上這事泪蔫。” “怎么了喘批?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵撩荣,是天一觀的道長。 經(jīng)常有香客問我饶深,道長餐曹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任敌厘,我火速辦了婚禮台猴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘俱两。我一直安慰自己饱狂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布宪彩。 她就那樣靜靜地躺著休讳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪毯焕。 梳的紋絲不亂的頭發(fā)上衍腥,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音纳猫,去河邊找鬼婆咸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛芜辕,可吹牛的內(nèi)容都是我干的尚骄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼侵续,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼倔丈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起状蜗,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤需五,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后轧坎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宏邮,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蜜氨。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片械筛。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖飒炎,靈堂內(nèi)的尸體忽然破棺而出埋哟,到底是詐尸還是另有隱情,我是刑警寧澤郎汪,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布赤赊,位于F島的核電站,受9級(jí)特大地震影響怒竿,放射性物質(zhì)發(fā)生泄漏砍鸠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一耕驰、第九天 我趴在偏房一處隱蔽的房頂上張望爷辱。 院中可真熱鬧,春花似錦朦肘、人聲如沸饭弓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽弟断。三九已至,卻和暖如春趴生,著一層夾襖步出監(jiān)牢的瞬間阀趴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國打工苍匆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留刘急,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓浸踩,卻偏偏與公主長得像叔汁,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子检碗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

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