NSUserDefault
一般來說壮莹,小規(guī)模數(shù)據(jù)扛邑,弱業(yè)務(wù)相關(guān)數(shù)據(jù),都可以放到NSUserDefault里面昨凡,內(nèi)容比較多的數(shù)據(jù)爽醋,強(qiáng)業(yè)務(wù)相關(guān)的數(shù)據(jù)就不太適合NSUserDefault了。
Keychain
Keychain是蘋果提供的帶有可逆加密的存儲(chǔ)機(jī)制便脊,普遍用在各種存密碼的需求上蚂四。另外,由于App卸載只要系統(tǒng)不重裝哪痰,Keychain中的數(shù)據(jù)依舊能夠得到保留遂赠,以及可被iCloud同步的特性,大家都會(huì)在這里存儲(chǔ)用戶唯一標(biāo)識(shí)串晌杰。所以有需要加密跷睦、需要存iCloud的敏感小數(shù)據(jù),一般都會(huì)放在Keychain肋演。
文件存儲(chǔ)
文件存儲(chǔ)包括了Plist抑诸、Archive烂琴、Stream等方式,一般結(jié)構(gòu)化的數(shù)據(jù)或者需要方便查詢的數(shù)據(jù)蜕乡,都會(huì)以Plist的方式去持久化奸绷。Archive方式適合存儲(chǔ)平時(shí)不太經(jīng)常使用但很大量的數(shù)據(jù),或者讀取之后希望直接對象化的數(shù)據(jù)层玲,因?yàn)锳rchive會(huì)將對象及其對象關(guān)系序列化号醉,以至于讀取數(shù)據(jù)的時(shí)候需要Decode很花時(shí)間,Decode的過程可以是解壓辛块,也可以是對象化畔派,這個(gè)可以根據(jù)具體<NSCoding>中的實(shí)現(xiàn)來決定。Stream就是一般的文件存儲(chǔ)了润绵,一般用來存存圖片啊啥的父虑,適用于比較經(jīng)常使用,然而數(shù)據(jù)量又不算非常大的那種授药。
數(shù)據(jù)庫存儲(chǔ)
數(shù)據(jù)庫存儲(chǔ)的話士嚎,花樣就比較多了。蘋果自帶了一個(gè)Core Data悔叽,當(dāng)然業(yè)界也有無數(shù)替代方案可選她混,不過真正用在iOS領(lǐng)域的除了Core Data外蔚约,就是FMDB比較多了枢泰。數(shù)據(jù)庫方案主要是為了便于增刪改查凶朗,當(dāng)數(shù)據(jù)有狀態(tài)和類別的時(shí)候最好還是采用數(shù)據(jù)庫方案比較好,而且尤其是當(dāng)這些狀態(tài)和類別都是強(qiáng)業(yè)務(wù)相關(guān)的時(shí)候趟庄,就更加要采用數(shù)據(jù)庫方案了括细。因?yàn)槟悴豢赡芡ㄟ^文件系統(tǒng)遍歷文件去甄別你需要獲取的屬于某個(gè)狀態(tài)或類別的數(shù)據(jù),這么做成本就太大了戚啥。當(dāng)然奋单,特別大量的數(shù)據(jù)也不適合直接存儲(chǔ)數(shù)據(jù)庫,比如圖片或者文章這樣的數(shù)據(jù)猫十,一般來說览濒,都是數(shù)據(jù)庫存一個(gè)文件名,然后這個(gè)文件名指向的是某個(gè)圖片或者文章的文件拖云。如果真的要做全文索引這種需求贷笛,建議最好還是掛個(gè)API丟到服務(wù)端去做。