iOS數(shù)據(jù)持久化方案

在介紹存儲方案之前有必要說下沙盒機(jī)制徐块,詳見:iOS中的沙盒目錄

數(shù)據(jù)持久化,其實(shí)就是將數(shù)據(jù)寫入到硬盤的方式毛秘,使得APP重啟之后可以繼續(xù)使用之前保存的數(shù)據(jù)饭寺。在iOS開發(fā)中,提供了5種數(shù)據(jù)持久化方案:

  • plist
  • Preference
  • NSKeyedArchiver
  • SQLite 3
  • CoreData
plist

plist是將一些特定的類通過xml文件轉(zhuǎn)化的方式將數(shù)據(jù)存儲到目錄中叫挟,可以被序列化的類只有:

NSArray
NSDictionary
NSString
NSNumber
NSData
NSDate
1. 獲取文件路徑
let documentsDir = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let plistName = "/user.plist"
2. 讀取
func readPlist() -> AnyObject? {
    return NSArray(contentsOfFile: documentsDir + plistName)
}
3.寫入(存儲)
// 存儲時使用writeToFile: atomically:方法艰匙。 其中atomically表示是否需要先寫入一個輔助文件,再把輔助文件拷貝到目標(biāo)文件地址抹恳。這是更安全的寫入文件方法员凝,一般都寫true。

func savePlist() {
    let plist = NSArray(array: ["ABC", "EFG", "SSK"])
    plist.write(toFile: documentsDir + plistName, atomically: true)
}
Preference

一般是用于存儲用戶的一些偏好設(shè)置和基本用戶信息奋献。比如用戶的id健霹,姓名,APP的字體大小等信息瓶蚂。偏好設(shè)置會將所有數(shù)據(jù)保存到同一個文件中糖埋。即preference目錄下的一個以此應(yīng)用包名來命名的plist文件。

1. 存儲
UserDefaults.standard.set("19658325", forKey: "uid")
UserDefaults.standard.synchronize()
2. 讀取
let uid = UserDefaults.standard.string(forKey: "uid")
NSKeyedArchiver

歸檔在iOS中是另一種形式的序列化窃这,只要遵循了NSCoding協(xié)議的對象都可以通過它實(shí)現(xiàn)序列化存儲阶捆。歸檔這種存儲方式的缺點(diǎn)是沒有preference速度快,優(yōu)點(diǎn)是可以自定義數(shù)據(jù)模型。

1. 定義數(shù)據(jù)模型
class PersonModel: NSObject, NSCoding {

    var avatar: UIImage?
    var name: String?
    
    // NSCoding協(xié)議聲明了兩個必須實(shí)現(xiàn)的方法洒试,一個用于將對象編碼到歸檔中另一個用于說明如何解檔來獲取新的對象倍奢。

    required init(coder aDecoder: NSCoder) {
        super.init()
        avatar = aDecoder.decodeObject(forKey: "avatar") as? UIImage
        name = aDecoder.decodeObject(forKey: "name") as? String
    }
    
    func encode(with aCoder: NSCoder) {
        aCoder.encode(self.avatar, forKey: "avatar")
        aCoder.encode(self.name, forKey: "name")
    }
    
    override init() {
        
    }
    
}
2. 指定路徑
// 文件擴(kuò)展名可以任意指定

let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] + "/person.file"
3. 歸檔
func archive() {
    let p = PersonModel()
    p.name = "大米卡卡"
    p.avatar = UIImage(named: "avatar")
    NSKeyedArchiver.archiveRootObject(p, toFile: path)
}
4. 解檔
func unarchive() {
    if let p = NSKeyedUnarchiver.unarchiveObject(withFile: path) as? PersonModel {
        avatarView.image = p.avatar
        nameLabel.text = p.name
    }
}
SQLite3
CoreData

CoreData本質(zhì)上依然是使用SQLite存儲機(jī)制,只是它不需要編寫一行SQL代碼垒棋。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卒煞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子叼架,更是在濱河造成了極大的恐慌畔裕,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乖订,死亡現(xiàn)場離奇詭異扮饶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)乍构,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門甜无,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人哥遮,你說我怎么就攤上這事岂丘。” “怎么了眠饮?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵奥帘,是天一觀的道長。 經(jīng)常有香客問我仪召,道長寨蹋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任扔茅,我火速辦了婚禮钥庇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘咖摹。我一直安慰自己评姨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布萤晴。 她就那樣靜靜地躺著吐句,像睡著了一般。 火紅的嫁衣襯著肌膚如雪店读。 梳的紋絲不亂的頭發(fā)上嗦枢,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機(jī)與錄音屯断,去河邊找鬼侣诺。 笑死,一個胖子當(dāng)著我的面吹牛氧秘,可吹牛的內(nèi)容都是我干的年鸳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼丸相,長吁一口氣:“原來是場噩夢啊……” “哼搔确!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起灭忠,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤膳算,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后弛作,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涕蜂,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年映琳,在試婚紗的時候發(fā)現(xiàn)自己被綠了机隙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡刊头,死狀恐怖黍瞧,靈堂內(nèi)的尸體忽然破棺而出诸尽,到底是詐尸還是另有隱情原杂,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布您机,位于F島的核電站穿肄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏际看。R本人自食惡果不足惜咸产,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仲闽。 院中可真熱鬧脑溢,春花似錦、人聲如沸赖欣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽顶吮。三九已至社牲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悴了,已是汗流浹背搏恤。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工违寿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人熟空。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓藤巢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親痛阻。 傳聞我的和親對象是個殘疾皇子菌瘪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 前言 一、直接寫入(writeToFile) 1.使用場景 生成plist文件阱当,以字典的形式保存簡單配置信息俏扩,如i...
    337b94dc718f閱讀 820評論 0 0
  • 1.iOS中數(shù)據(jù)存儲方式 plist(NSArray/NSDictionary) preference(NSUse...
    來金德瑞閱讀 328評論 0 1
  • 1、 沙盒概念基本介紹 iOS 應(yīng)用程序只能在該 app 的文件系統(tǒng)中讀取弊添。這個默認(rèn)的 app 文件系統(tǒng)就是我們說...
    Laughingg閱讀 2,654評論 2 10
  • 在程序開發(fā)中录淡,數(shù)據(jù)層永遠(yuǎn)是程序的核心結(jié)構(gòu)之一。我們將現(xiàn)實(shí)事物進(jìn)行抽象油坝,使之變成一個個數(shù)據(jù)嫉戚。對這些數(shù)據(jù)的加工處理是代...
    sindri的小巢閱讀 16,831評論 13 85
  • 今天上午去機(jī)房問了一下昨天考試成績應(yīng)該如何計算,很慶幸的地知自己低分飄過——終究是及格了澈圈。昨天我痛苦在今天得到回報...
    忽爾今至閱讀 230評論 0 0