iOS資料儲存

2021-07-11 08:00:50 字數 4441 閱讀 6904

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

documents:蘋果建議將程式中的檔案資料儲存在該目錄下,並且在itunes備份和恢復的時候也會包含此目錄。

library: 使用者儲存程式的預設設定或其他狀態資訊

library/caches: 存放快取檔案,itunes不會備份此目錄,此目錄下檔案不會在應用退出時刪除。

library/preferences: 儲存程式的預設設定,基於nsuserdefaults的首選項設定便儲存在這裡。

tmp: 用於**用程式儲存臨時檔案,並且itunes不會備份tmp中的檔案。

//獲取沙盒home目錄

var path = nshomedirectory()

print("home=\(path)")

//獲取doucments目錄

path =nssearchpathfordirectoriesindomains(.documentdirectory, .userdomainmask, true).first!

print("documents =\(path)")

//獲取library目錄

path = nssearchpathfordirectoriesindomains(.librarydirectory, .userdomainmask, true).first!

print("library =\(path)")

//獲取caches目錄

path = nssearchpathfordirectoriesindomains(.cachesdirectory, .userdomainmask, true).first!

print("caches = \(path)")

//獲取tmp目錄

path = nstemporarydirectory()

print("tmp=\(path)")

//檢測目錄是否存在

func checkdirectorypath(path: string) -> bool else

return result

}//建立目錄

func createdirectorypath(path: string)catch

}//刪除目錄

func deletedirectorypath(path: string) catch

}

使用者首選項又被稱為偏好設定,它被設計用來儲存裝置和應用的配置資訊,通過nsuserdefaults類來實現。通常情況下,我們首先通過乙個類方法返回預設的、也是最常用到的例項物件,這個物件中儲存了系統中使用者的配置資訊,然後開發者就可以童工這個是咧物件對這些已有的資訊進行修改,也可以按照自己的需求建立新的配置項。

nsuserdefaults把配置資訊以字典的形式組織起來,支援字典的項包括: 字串、陣列,數字等基本格式。

//使用者首選項儲存資訊

let usersingle = nsuserdefaults.standarduserdefaults()

usersingle.setobject(nsdate(), forkey: "currenttime")

usersingle.synchronize()

//獲取資訊

let currenttime = usersingle.objectforkey("currenttime")

print("print\(currenttime)")

在ios中有一類名為屬性列表的物件,通常簡寫為plist.這些列表用來放置一些ios能夠處理的物件,這些屬性列表類是nsarray、nsdictionary、nsstring nsnumber nsdate nsdata,以及它們的可修改狀態。

//屬性列表

let documentspath: string = nssearchpathfordirectoriesindomains(.documentdirectory, .userdomainmask, true).first!

let namepath = "\(documentspath)/name.plist"

let namedic: nsdictionary = ["name":"zhangkuo","age":"27"]

//寫入檔案

namedic.writetofile(namepath, atomically: true)

//獲取檔案內容

let namedicpath = nsdictionary(contentsoffile: namepath)!

print("namedicpath =\(namedicpath)")

//sqlite3資料庫操作

var db: copaquepointer = nil //建立c指標

let path = nssearchpathfordirectoriesindomains(.documentdirectory, .userdomainmask, true).first!

let sqlitefile:nsstring = "\(path)/test.sqlite3"

let sql = sqlitefile.utf8string

//開啟或建立資料庫

if sqlite3_open(sql, &db) != sqlite_ok

//建立表

let string: nsstring = "create table if not exists student(id integer primary key autoincrement, son text, name text, score integer)"

let sqlstring = string.utf8string

if sqlite3_exec(db, sqlstring, nil, nil, nil) != sqlite_ok

core data是蘋果公司推出的一種資料持久化解決方案,其原理是對sqlite的封裝,我們不需要接觸sql語句,就可以對資料庫進行操作。

通過core data,我們可以將程式中的物件儲存為外部資料,當然也可以將外部資料恢復為程式中的物件,其實這些工作是由core data的一系列的類來協作完成的,我們把這些類的集合稱為持久儲存棧,它是由以下部分組成:

1)、託管物件模型: managed object model

它可以被理解為資料庫模型,表示程式中資料模型的每一物件型別,物件包含的屬性以及物件之間關係。core data棧使用這個模型來建立物件,儲存屬性以及儲存資料。

2)、持久化儲存:persistent store

它用於讀取和儲存資料到某種指定型別的儲存倉庫中。core data提供了4種型別的儲存倉庫,其中3種是原子的,一種是非原子的。這裡的原子和原子操作意義不同。這裡的原子倉庫指的是當你要讀或寫資料時,必須將整個倉庫反序列化並載入到記憶體中。而非原子倉庫則可以指載入一部分資料到記憶體中即可操作。

倉庫的型別有4種:

nsqlitestoretype: 後台為sqlite資料庫,非原子倉庫。輕量化並且占用較少記憶體,推薦在ios程式中使用這種倉庫。xcode core data模板預設使用這種倉庫。

nsxmlstoretype: 後台為xml檔案,原子倉庫。人可讀的資料倉儲型別,但是占用大量記憶體,只有osx可以使用這種型別。

nsbinarystoretype: 後台為二進位制檔案,原子倉庫,仍然占用大量記憶體,不推薦。

nsinmemorystoretype: 記憶體倉庫型別,原子倉庫,非「持久」化,結束程式或者關機都會導致資料丟失。

3)、持久化儲存助理:persistent store coordinator

它是託管物件模型和持久化儲存之間的橋梁。它完成了core data中最負責的部分,這個類nsmanagedobjectmodel,它知道如何傳送訊息給nspersistentstore,也知道如何從nspersistentstore獲取資料。助理的存在隔離和隱藏了persistent store的具體實現和配置方法,因為nsmanagedobjectcontext不需要了解資料到底是儲存到sqlite倉庫中,還是儲存在其他型別的倉庫中。如果程式使用了多個persistent store,助理用於向managed context提供乙個統一的介面。

4)、託管物件上下文:managed object context

managed object context 是乙個記憶體中的物件,用於和managed object協同工作,通常情況下,我們接觸和使用最多的就是nsmagagedobject

未完待續

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...

ios 資料儲存方式

今天發現一篇好文章,忍不住收藏下來 所謂的持久化,就是將資料儲存到硬碟中,使得在應用程式或機器重啟後可以繼續訪問之前儲存的資料。在ios開發中,有很多資料持久化的方案,接下來我將嘗試著介紹一下5種方案 在介紹各種儲存方法之前,有必要說明以下沙盒機制。ios程式預設情況下只能訪問程式自己的目錄,這個目...