本章部落格我主要是把ui後期初級資料持久化的一些基本使用總結了下,這裡主要分享了沙盒機制的概念,簡單物件不同情況下的寫入,複雜物件的寫入,以及data與二進位制
之間相互轉化的方法,希望可以幫到大家。
一.沙盒機制
1. 每個應用程式位於檔案系統的嚴格限制部分
2. 每個應用程式只能在為該程式建立的檔案系統中讀取檔案
3. 每個應用程式在ios系統內都放在了統一的檔案目錄下
4. 沙盒路徑的位置的方法有兩種:
(1).通常我們會通過finder查詢程式沙盒相對路徑
(2).通過**查詢程式沙盒相對路徑
nssearchpathfordirectoriesindomains(nssearchpathdirectorydirectory, nssearchpathdomainmask domainmask, bool expandtilde)引數1
:(document
資料夾,
tmp資料夾,
library
資料夾)要搜尋哪個資料夾引數2
:(固定為
nsuserdomainmask
)獲得iphone
使用者資料夾引數3
:yes
(絕對路徑)
no(相對路徑)
5.nsbundle 獲取列表中的檔案 獲取bundle裡的檔案,bundle也有兩個重點:
//獲取
nsbundle
包的路徑 列表的路徑
nsstring * bundlepath = [nsbundle
mainbundle].resourcepath;
nslog(@"**********=%@",bundlepath);
//獲取
bundle
包中的路徑 列表中的路徑
//通過檔案路徑產生乙個
uiimage //
好處:1.
穩定2.
直接從檔案讀取(檔案
->
記憶體)只走一次
//imagenamed:1.
不穩定2.
適合多次使用(檔案
->
記憶體)可以重複使用
uiimage * image = [uiimage
imagewithcontentsoffile:imgpath];
二.簡單物件寫入檔案
在寫入檔案的時候我們基本會遇到三種情況首先是要對檔案儲存,記下來對字串,陣列,字典三種情況分別寫入。
1.檔案儲存的相對目錄
nsarray * array = nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes);
nsstring * path = [array objectatindex:0];
nslog(@"*****%@",path);
2.字串物件寫入檔案
//1.
把字串物件寫入
documents
資料夾內 //
第一步,給要寫入的字串
指定乙個檔案的路徑 //
第二部,建立乙個字串
nsstring * string = @"
何必要在一起
";//
第三步,將字串寫入路徑 //
引數1:是檔案路徑引數2
:yes
先放入快取資料夾中
[string writetofile:txtpath atomically:yes
encoding:nsutf8stringencoding
error:nil];
3.陣列物件寫入檔案
//陣列寫入路徑
(arr.plist
或者arr.xml)
nsarray * arr = [nsarray
arraywithobjects:@"fldksj",@"sdfs",@"zisfj", nil];
[arr writetofile:arrpath atomically:yes];
4.字典物件寫入檔案
//字典
nsdictionary * dic = [nsdictionary
dictionarywithobjectsandkeys:@"fwfe",@"sddsg", nil];
[dic writetofile:dicpath atomically:yes];
除了以上三種情況外,當我們遇到data的時候要用二進位制物件寫入檔案,個人感覺這個方法很重要!
int index = 0;
nsdata * data = [[nsdata
alloc] initwithbytes:&indexlength:sizeof(index)];
[data writetofile:datapath atomically:yes];
三.複雜物件寫入檔案
我們在對複雜物件寫入之前,要明確知道什麼是複雜物件
複雜物件是指在foundation框架內不存在的資料類,無法在程式內通過write tofile型別的方法寫入到檔案內,複雜物件至少包含乙個例項物件
構造複雜物件的生成類
#import
@inte***ce boss : nsobject
@property (nonatomic,retain)nsstring * name;
@property (nonatomic,retain)nsstring * job;
@end
3.使複雜物件接受nscoding協議
@inte***ce boss : nsobject
4.使複雜物件實現nscoding協議
#import
"boss.h"
@implementation boss
//歸檔方法
將複雜的物件轉換成資料流(
nsdata
)的協議方法
- (void)encodewithcoder:(nscoder *)acoder
//解檔
的方法將
nsdata
物件恢復成
複雜物件的方法
- (id)initwithcoder:(nscoder *)adecoder
return
self;
}@end
5.將複雜物件boss的例項物件寫入檔案
nsarray * libarr = nssearchpathfordirectoriesindomains(nslibrarydirectory, nsuserdomainmask, yes);
nsstring * libpath =[libarr lastobject];
nslog(@"*****=%@",libpath);
//歸檔地點(構造複雜物件的儲存路徑)
boss * boss = [[boss
alloc] init];
boss.name = @"
蔣神";
boss.job = @"
魔王";
//把複雜物件首先要轉成
nsdata型別(
歸檔)(通過將
nskeyedarchiver
類對複雜物件進行序列化並且儲存到檔案路徑下)
[nskeyedarchiver
archiverootobject:boss tofile:bosspath];
nslog(@"**********==%@",bosspath);
//反歸檔
boss * bossreturn = [nskeyedunarchiver
unarchiveobjectwithfile:bosspath];
nslog(@"%@",bossreturn.name);
初級資料持久化
沙盒機制 列印沙盒的各個資料夾路徑 void path 簡單物件的寫入 系統的類例項出來的物件 叫簡單物件 例如 字串 陣列 字典 二進位制物件 nsdata 如果要寫入乙個陣列 或者 字典 等容器類物件 那麼這個容器當中 也要儲存是 簡單物件才能寫入 void writefile dic writ...
TwistedFate 初級資料持久化
沙盒機制 開啟沙盒的各個資料夾路徑 void path簡單物件的寫入 void writefile dic writetofile dicpath atomically yes 寫入data nsstring datastr 且隨疾風前行 nsdata data datastr datausinge...
18 初級資料持久化
分享 利用paros進行ios應用抓包。沙盒路徑 區別 bundle路徑下 唯讀不寫 sandbox路徑下 可讀可寫 讀取資料 方法initwithcontentsoffile 陣列和字典中的物件型別,必須是nsstring nsarray nsdata nsdictionary model型別不可...