iOS資料的儲存

2021-07-14 14:45:12 字數 4432 閱讀 8634

ios應用資料儲存的常用方式有

1.plist檔案。2 .preference(偏好設定)。 3.nskeyarchiver歸檔(nscoding)4.資料庫儲存(sqlite3 當有大量的資料需要儲存時使用)。

今天我們只講前面三中,資料庫後面在說。

講之前要先了解一下沙盒(sandbox),每個軟體都有自己的應用沙盒(應用沙盒就是應用的資料夾),與其它檔案系統隔離。應用必須待在自己的沙盒裡,

其它應用不能訪問該沙盒。應用沙盒的檔案系統目錄如下圖:

沙盒中各資料夾的作用

獲取沙盒路徑

nslog(@"

沙盒路徑==%

@",nshomedirectory

());

注意要和bundle路徑區分開,別搞混淆了

nslog

(@"bundlepath*****=%@"

,[nsbundle

mainbundle

].bundlepath

);bundle路徑應用程式的根路徑,比如獲取專案info.plist檔案,通過bundle路徑去拿。

獲取documents資料夾路徑

nsstring

*documentpath = [

nssearchpathfordirectoriesindomains

(nsdocumentdirectory

,nsuserdomainmask

,yes

)lastobject];

第乙個引數:目標檔案。第二個引數:作用域,第三個引數:是否展開~。

獲取caches資料夾路徑

nsstring

*cachespath = [

nssearchpathfordirectoriesindomains

(nscachesdirectory

,nsuserdomainmask

,yes

)lastobject];

獲取tmp資料夾路徑

nsstring

*temppath =

nstemporarydirectory

(); 

直接通過方法去獲取。

那先講第一種plist檔案儲存(主要儲存有writetofile方法的物件,比如nsarray 

nsdictionary nsstring nsdata 物件);

nsstring

*documentpath = [

nssearchpathfordirectoriesindomains

(nsdocumentdirectory

,              

nsuserdomainmask

,yes

)lastobject];

nsarray

*names = [

nsarray

arraywithobjects

:@"jack"

,@"rose"

,@"tom"];

nsstring

*file = [documentpath

:@"name.plist"];

//引數

2:是否允許原子型寫入

[names

writetofile

:file

atomically

:yes];

plist檔案的讀取

nsstring

*documentpath = [

nssearchpathfordirectoriesindomains

(nsdocumentdirectory

,nsuserdomainmask

,yes

) lastobject];

nsstring

*file = [documentpath

:@"name.plist"];

nsarray

*names = [

nsarray

arraywithcontentsoffile

:file];

偏好設定儲存(本質還是乙個plist檔案)

nsuserdefaults

*defaults = [

nsuserdefaults

standarduserdefaults];

[defaults

setbool

:yes

forkey

:@"isautologin"];

[defaults

setobject

:@"wululin"

forkey

:@"username"];

[defaults

setobject

:@"560560"

forkey

:@"password"];

[defaults

synchronize];

記得要呼叫

synchronize.

偏好設定讀取

nsuserdefaults

*defaults = [

nsuserdefaults

standarduserdefaults];

bool

isauto = [defaults

boolforkey

:@"isautologin"];

nsstring

*name = [defaults

objectforkey

:@"username"];

nsstring

*password = [defaults

objectforkey

:@"password"];

歸檔 物件要歸檔,首先要遵守nscoding協議,然後實現encodewithcoder方法,告訴系統哪些屬性需要歸檔。

建立乙個person類 遵守nscoding協議。

#import

@inte***ce

person :

nsobject

<

nscoding

>

@property

(nonatomic

,copy

)nsstring

*name;

@property

(nonatomic

,copy

)nsstring

*phone;

@end

實現encodewithcoder方法

@implementation

person //

歸檔告訴系統要儲存哪些屬性 -(

void

) encodewithcoder:(

nscoder

*)acoder

@end

用nskeyedarchiver

將物件寫入檔案

nsstring

*path = [

nssearchpathfordirectoriesindomains

(nsdocumentdirectory

, nsuserdomainmask

, yes

)lastobject];

nsstring

*filepath = [path 

:@"person.plist"];

[nskeyedarchiver

archiverootobject

:person 

tofile

:filepath];

反歸檔實現initwithcoder方法 //

反歸檔讀取物件的哪些屬性 -(

instancetype

) initwithcoder:(

nscoder

*)adecoder

return

self;

} 用nskeyedunarchiver

將檔案轉化成物件

nsstring

*path = [

nssearchpathfordirectoriesindomains

(nsdocumentdirectory

,nsuserdomainmask

, yes

)lastobject];

nsstring

*filepath = [path

:@"person.plist"];

[nskeyedarchiver

archiverootobject

:person

tofile

:filepath];

person

*p = [

nskeyedunarchiver

unarchiveobjectwithfile

:filepath];

iOS資料儲存

預設情況下,每個沙盒含有3個資料夾 documents,library和tmp.由於受沙盒機制的限制,應用只能在這幾個目錄下讀寫檔案 在itunes與iphone同步時,會備份所有的dcuments和library目錄,並且當iphone在重啟時,會丟棄所有的tmp檔案。documents 蘋果建議...

iOS 資料儲存

ios應用資料儲存常用方式 1 plist檔案儲存 2 nsuserdefault 設定儲存 3 sqlite3 4 core data plist檔案儲存是將nsstring,nsarray,nsdictionary,nsnumber等型別寫到檔案中 將字典寫入檔案中 nsdictionary p...

iOS 資料儲存

1 plsit屬性列表 1 適用物件 僅僅是foundation框架中自帶的一些類,比如 nsstring nsarray nsdicionary nsset nsnumber nsdata 2 呼叫物件的writetofile.方法就可以寫入檔案 3 呼叫物件的.withcontentsoffil...