對資料持久化的理解

2021-09-30 13:06:35 字數 2442 閱讀 5066

nsuserdefaults被設計用來儲存裝置和應用的配置資訊,它通過乙個工廠方法返回預設的、也是最常用到的例項物件。這個物件中儲存了系統中使用者的配置資訊,開發者可以通過這個例項物件對這些已有的資訊進行修改,也可以按照自己的需求建立新的配置項。

/**

1. 該單例物件封裝了對plist檔案的讀寫操作,可以對每個字段單獨讀寫

2. 該plist檔案在系統的library/preferences目錄下,名字為<>

*/nsuserdefaults *defaults = [nsuserdefaults standarduserdefaults];

// 2. 寫操作

// 將開關的值記錄到plist檔案中,鍵為"switch"

[defaults setbool:_toggle.on forkey:@"switch"];

// 將進度值文字框的內容記錄到plist檔案中,鍵為"progress"

nsstring *progress = _progresstextfield.text;

float progressvalue = [progress floatvalue];

[defaults setfloat:progressvalue forkey:@"progress"];

// 將輸入文字框的內容記錄到plist檔案中,鍵位"input"

[defaults setobject:_inputtextfield.text forkey:@"input"];

// 3. 將記憶體中的配置值,重新整理到plist檔案中

[defaults synchronize];

nsuserdefaults把配置資訊以字典的形式組織起來,支援字典的項包括:字串或者是陣列,除此之外還支援數字等基本格式。一句話概括就是:基礎型別的小資料的字典。操作方法幾乎與nsdictionary的操作方法無異,另外還可以通過指定返回型別的方法獲取到指定型別的返回值。
nsuserdefaults *defaults = [nsuserdefaults standarduserdefaults];

_toggle.on = [defaults boolforkey:@"switch"];

_progressview.progress = [defaults floatforkey:@"progress"];

_label.text = [defaults stringforkey:@"input"];

ios的sdk裡預置了sqlite的庫,開發者可以自建sqlite資料庫。sqlite每次寫入資料都會產生io消耗,把資料歸檔到相應的檔案。

sqlite擅長處理的資料型別其實與nsuserdefaults差不多,也是基礎型別的小資料,只是從組織形式上不同。開發者可以以關係型資料庫的方式組織資料,使用sql dml來管理資料。 一般來說應用中的格式化的文字類資料可以存放在資料庫中,尤其是類似聊天記錄、timeline等這些具有條件查詢和排序需求的資料。

每乙個資料庫的控制代碼都會在記憶體中都會被分配一段快取,用於提高查詢效率。另乙個方面,由於查詢快取,當產生大量控制代碼或資料量較大時,會出現快取過大,造成記憶體浪費。

sqlite的使用起來要比nsuserdefaults複雜的多,因此建議開發者使用sqlite要搭配乙個操作控制項使用,可以簡化操作。

1.nscoding協議

// 解檔 反序列化 解碼 從data

(file)->物件

- (instancetype)initwithcoder:(nscoder *)adecoder

return self;

}// 歸檔 序列化 編碼 從物件->data

(file)

- (void)encodewithcoder:(nscoder *)acoder

2.儲存資料
sfstudent *student = [[sfstudent alloc] init];

student.name = _name.text

; student.age = [_age.text intvalue];

student.identify = _identify.text

; // 將student物件歸檔到檔案

[nskeyedarchiver archiverootobject:student tofile:_path];

3.讀取資料
// 解檔出乙個物件

sfstudent *student = [nskeyedunarchiver unarchiveobjectwithfile:_path];

if (student == nil)

_name.text = student.name;

_age.text = [@(student.age) strin**alue];

_identify.text = student.identify;

資料持久化

資料持久化就是將記憶體中的資料模型轉換為儲存模型,以及將儲存模型轉換為記憶體中的資料模型的統稱.資料模型可以是任何資料結構或物件模型,儲存模型可以是關係模型 xml 二進位製流等。cmp和hibernate只是物件模型到關係模型之間轉換的不同實現。只不過物件模型和關係模型應用廣泛,所以就會誤認為資料...

資料持久化

首先是cocos2d x自己封閉的ccuserdefault跨平台的檔案儲存類,它是用的xml格式,具體操作非常類似於應用開發的ini檔案,可操作性不是很強,如果訪問比較複雜的資料,那就得自己動手去解析乙個字串,下面是示例 基本一看就懂 void userdefaulttest dotest els...

資料持久化

資料持久化是通過檔案將資料儲存在磁碟上 ios有四種資料持久化方式 1.屬性列表 property list 簡單易用,適合小資料量的儲存和查詢操作,但是不適合大量資料的儲存.屬性列表 1屬性列表 property list nsarray plist name age 指定儲存的地方 nsstri...