iOS應用資料的儲存的常用方式

2021-07-10 02:05:49 字數 4713 閱讀 8122

1.

xml屬性列表(plist)歸檔

2.preference(偏好設定)

本質還是通過」plist」檔案來儲存資料,但是使用更簡單(無需關注檔案.資料夾路徑和名稱)

3.nskeyedarchiver歸檔(nscoding)

把任何物件,直接儲存為檔案的方式.

4.sqlite3

當非常大量的資料儲存時使用

5.core data

就是對sqlite的封裝

二.沙盒sandbox

1.每個ios應用dou都有自己的應用沙盒(應用沙盒就是應用的資料夾),與其他系統隔離.應用必須待在自己的沙盒裡,其他應用不能訪問該沙盒.

2.沙盒的結構分析

documents:儲存應用執行時生成的需要持久化的資料.itunes同步裝置時會備份該目錄.

tmp:儲存應用執行時所需的臨時資料,使用完畢後在將相應的檔案從該目錄刪除.應用沒有執行時,系統也可能會清除該目錄下的檔案.

library/caches:儲存應用執行時生成的需要持久化的資料,一般儲存體積大,不需要備份的非重用資料.

libray/preference:儲存應用的所有偏好設定,ios的settings(設定)應用會在該目錄中查詢應用的設定資訊. 該目錄由系統管理.無需我們來管理,通常用來儲存一些基本的軟體配置資訊,比如記住密碼,自動登入.

總結:我們平常運算元據主要使用docunents目錄.

三.應用沙盒目錄的常見的獲取方式

沙盒根目錄: nsstring *home = nshomedirectory();

documents:(2種方式)

◆   利用沙盒根目錄拼接」documents」字串
◆   利用nssearchpathfordirectoriesindomains函式
// nsuserdomainmask 代表從使用者資料夾下找

// yes 代表展開路徑中的波浪字元「~」

nsarray *array = nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes);

// 在ios中,只有乙個目錄跟傳入的引數匹配,所以這個集合裡面只有乙個元素

nsstring *documents = [array objectatindex:0];

四.

●   tmp:nsstring *tmp = nstemporarydirectory();

● library/caches:(跟documents類似的2種方法)

◆ 利用沙盒根目錄拼接」caches」字串

◆ 利用nssearchpathfordirectoriesindomains函式(將函式的第2個引數改為:nscachesdirectory即可)

● library/preference:通過nsuserdefaults類訪問該目錄下的設定資訊

五.屬性列表

屬性列表是一種xml格式的檔案,拓展名為plist

如果物件是: nsstring、nsdictionary、nsarray、nsdata、nsnumber等型別,就可以使用writetofile:atomically:方法直接將物件寫到屬性列表檔案中

2.屬性的列表的歸檔

將乙個nsdictionary物件歸檔到乙個plist屬性列表中

1.將資料封裝中字典

nsmutabledictionary *dict = [nsmutabledictionary dictionary];

[dict setobject:@」母雞」 forkey:@」name」];

[dict setobject:@」15013141314」 forkey:@」phone」];

[dict setobject:@」27」 forkey:@」age」];

2.將字典持久到documents/乙個檔案中

[dict writetofile:path atomically:yes];

讀取屬性列表,恢復nsdictionary物件

//讀取位址 例項化nsdictionary物件

nsdictionary *dict = [nsdictionary dictionarywithcontentsoffile:path];

nslog(@」name:%@」, [dict objectforkey:@」name」]);

nslog(@」phone:%@」, [dict objectforkey:@」phone」]);

nslog(@」age:%@」, [dict objectforkey:@」age」]);

六.偏好設定

很多ios應用程式都支援偏好設定,比如儲存使用者名稱,密碼,字型大小等設定.ios提供了一套標準的解決方案為應用程式加入偏好設定

2. 每個應用都有個nsuserdefaults 例項,通過它訪問偏好設定

比如,儲存使用者名稱.字型大小,是否自動登入

nsuserdefaults *defaults = [nsuserdefaults standarduserdefaults];

[defaults setobject:@」 lhh」 forkey:@」username」];

[defaults setfloat:18.0f forkey:@」text_size」];

[defaults setbool:yes forkey:@」auto_login」];

讀取上次儲存的設定 要通過 defults

nsuserdefaults *defaults = [nsuserdefaults standarduserdefaults];

nsstring *username = [defaults stringforkey:@」username」];

float textsize = [defaults floatforkey:@」text_size」];

bool autologin = [defaults boolforkey:@」auto_login」];

注意:userdefaults 設定資料時,不是立即寫入,而是根據時間戳定時的把快取中的資料寫入本地磁碟.所以呼叫set方法之後資料有可能還沒有寫入磁碟應用程式就終止了.出現以上問題,可以呼叫synchornize方法強制寫入[defaults synchornice]

七.nskeydarchiver

如果物件是nsstring .nsdictionary.nsarray.nsdata,nsnumerber等型別,可以直接使用nskeydarchiver進行歸檔和恢復.

2.不是所以物件都可以直接用這中方法進行歸檔,只有遵守了nscoding協議的物件才可以

nscoding協議有2個方法:

encodewithcoder:

每次歸檔時,都會呼叫者個方法,一般在這個方法裡面指定了如何歸檔物件中每個例項變數,可以使用 encodeobject:forkey ;方法歸檔例項變數.

initwithcoder:

每次從檔案中恢復(解碼)物件時,都會呼叫這個方法.一般在這個方法裡面指定如何解碼檔案中的資料為物件的例項變數.可以使用decodeobject:forkey方法解碼例項變數.

 nskeyedarchiver-歸檔person物件(person.h)

@inte***ce person : nsobject

@property (nonatomic, copy) nsstring *name;

@property (nonatomic, assign) int age;

@property (nonatomic, assign) float height;

@end

@implementation person

- (void)encodewithcoder:(nscoder *)encoder

- (id)initwithcoder:(nscoder *)decoder

- (void)dealloc

@end

nskeyedarchiver-歸檔person物件(編碼和解碼)

●   歸檔(編碼)
person *person = [[[person alloc] init] autorelease];

person.name = @」mj」;

person.age = 27;

person.height = 1.83f;

[nskeyedarchiver archiverootobject:person tofile:path];

● 恢復(解碼)

person *person = [nskeyedunarchiver unarchiveobjectwithfile:path];

nskeyedarchiver-歸檔物件的注意

●   如果父類也遵守了nscoding協議,請注意:

◆ 應該在encodewithcoder:方法中加上一句

[super encodewithcode:encode];

確保繼承的例項變數也能被編碼,即也能被歸檔

◆ 應該在initwithcoder:方法中加上一句

self = [super initwithcoder:decoder];

確保繼承的例項變數也能被解碼,即也能被恢復

iOS 應用資料儲存的常用方式

os 開發中,經常會有將資料儲存到本地的需求。比如一些資料的快取,或者記錄下使用者的賬號密碼,記錄下下次是否自動登入等,這些都需要將資料記錄到本地。ios中,資料儲存到本地的常見方式有三種 一 使用plist 儲存到本地 二 preference 偏好設定 三 歸檔解檔。舉例介紹一下三種方式。方式一...

iOS本地資料儲存的方式

1 nskeyedarchiver 歸檔 採用歸檔的形式來儲存資料,可以實現對複雜物件的資料儲存,該資料物件需要遵守nscoding協議,並且該物件對應的類必須提供encodewithcoder 和initwithcoder 方法.2 nsuserdefaults 用來儲存應用程式設定和屬性 使用者...

iOS本地資料儲存的方式

ios本地資料儲存有哪幾種方式?1.複雜物件寫入本地nskeyedarchiver 歸檔 採用歸檔的形式來儲存資料,該物件資料需要遵守nscoding協議,並且該物件對應的類必須提供encodewithcoder 和initwithcoder 方法。現在建立乙個boss類,並且.h遵守nscodin...