OC資料持久化

2021-07-15 15:01:32 字數 2559 閱讀 6545

oc中有哪些資料儲存方式,各有什麼區別?

四種儲存方式:

1.nsuserdefaults,用於儲存配置資訊

2.sqlite,用於儲存查詢需求較多的資料

3.coredata,用於規劃應用中的物件

4.使用基本物件型別定製的個性化快取方案.

nsuserdefaults:物件中儲存了系統中使用者的配置資訊,開發者可以通過這個例項物件對這些已有的資訊進行修改,也可以按照自己的需求建立新的配置項。

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

coredata是乙個管理方案,它的持久化可以通過sqlite、xml或二進位制檔案儲存。它可以把整個應用中的物件建模並進行自動化的管理。從歸檔檔案還原模型時coredata並不是一次性把整個模型中的所有資料都載入記憶體,而是根據執行時狀態,把被呼叫到的物件例項載入記憶體。框架會自動控制這個過程,從而達到控制記憶體消耗,避免浪費。無論從設計原理還是使用方法上看,coredata都比較複雜。因此,如果僅僅是考慮快取資料這個需求,coredata絕對不是乙個優選方案。coredata的使用場景在於:整個應用使用coredata規劃,把應用內的資料通過coredata建模,完全基於coredata架構應用。使用基本物件型別定製的個性化快取方案:從需求出發分析快取資料有哪些要求:按key查詢,快速讀取,寫入不影響正常操作,不浪費記憶體,支援歸檔。這些都是基本需求,那麼再進一步或許還需要固定快取項數量,支援佇列快取,快取過期等。

mac os x中sqlite庫,它是乙個輕量級功能強大的關係資料引擎,也很容易嵌入到應用程式。可以在多個平台使用,sqlite是乙個輕量級的嵌入式sql資料庫程式設計。與coredata框架不同的是,sqlite是使用程式式的,sql的主要的api來直接運算元據表。

core data不是乙個關係型資料庫,也不是關係型資料庫管理系統(rdbms)。雖然core dta支援sqlite作為一種儲存型別, 但它不能使用任意的sqlite資料庫。core data在使用的過程種自己建立這個資料庫。core data支援對

一、對多的關係。

第一種:實用屬性列表,第二種:物件歸檔,第三種:嵌入式資料庫(sqlite3)

第四種:檔案寫入磁碟

首先是屬性列表。nsuserdefaults位於屬性列表的最頂層,沙盒寫入技術,以及物件的歸檔,以及第三方的sqllite,還有就是coredata。

首先讓我們說說這個屬性列表:它是儲存相對較小資料量的簡潔方式,並且耗費非常低的工作量。但是這個屬性列表也是有限制的像剛才我說的儲存資料量小的資料,還有就是一些自定義的物件是不能儲存的,只能是支援序列化的物件,想字典,資料,字串,對了還是不能新增ui介面的東西。他們可以以兩種不同的方式儲存乙個是xml,這個xml是一種可讀性非常強的格式,另乙個是內部專門有的2進製的格式,這種方式速度更快寫,資料量更小些。正如我們所說的nsuerdefaults位於屬性列表的頂層,因此我們可以輕鬆的讀取並且儲存資料。

nsuserdefaults類的使用和nskeyedarchiver有很多類似之處,但是檢視nsuserdefaults的定義可以看

出,nsuserdefaults直接繼承自nsobject而nskeyedarchiver 繼承自nscoder。這意味著nskeyedarchiver實際上是個歸檔持久化的類,也就可以使用nscoder類的[encodeobject: (id)objv forkey:(nsstring *)key]方法來對資料進行持久化儲存

蘋果的乙個專門記憶模式的實現是歸檔。把乙個物件轉化為流便於儲存和恢復不用向外部類暴露私有的屬性。

在實現檔案裡面,新增兩個方法:

*)acoder

*)adecoder

core data是一種穩定,功能全面的持久化工具,和之前的一些持久化工具相比,他不需要對實體進行歸檔,也就是序列化,而是在資料模型編輯器中建立一些實體

在**中,你不再使用訪問方法和修改方法,而是使用鍵值對編碼來設定屬性或者減縮他們的值

那麼這些託管物件的活動區域在哪?他們位於所謂的持久庫中,預設情況下,core data應用程式將持久庫實現為儲存在應用程式文件目錄的sqlite資料庫。

雖然資料是通過sqlite儲存的,但框架中的類將完成載入和儲存資料的相關工作。不許要編寫任何sql語句。

sqlite3:

資料庫物件:sqlite3          資料庫指標:sqlite3_stmt

sqlite3_open():開啟資料庫

sqlite3_prepare():負責編譯sql語句

sqlite3_step():只能得到第一行的內容,繼續呼叫該函式直到所有結果都記錄完畢

sqlite3_column():將sqlite3_step執行的結果讀出來

sqlite3_finalize():在sqlite3_stmt使用完畢後銷毀sqlite3_stmt

sqlite3_close():關閉資料庫

sqlite3_exec():執行sql語句

sqlite3_bind_***():根據希望使用的資料型別,選擇不同的繫結語句。

資料持久化

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

資料持久化

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

資料持久化

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