iOS面試題:iOS中常用的數(shù)據(jù)存儲(chǔ)方式有哪些?

  • 綜合

    • 所有的本地持久化數(shù)據(jù)存儲(chǔ)的本質(zhì)都是寫文件,而且只能存到沙盒中。

    • 沙盒機(jī)制是蘋果的一項(xiàng)安全機(jī)制,本質(zhì)就是系統(tǒng)給每個(gè)應(yīng)用分配了一個(gè)文件夾來(lái)存儲(chǔ)數(shù)據(jù),而且每個(gè)應(yīng)用只能訪問(wèn)分配給自己的那個(gè)文件夾,其他應(yīng)用的文件夾是不能訪問(wèn)的。

    • 數(shù)據(jù)存儲(chǔ)的核心都是寫文件。主要有四種持久化方式:屬性列表,對(duì)象序列化,SQLite 數(shù)據(jù)庫(kù), CoreData

    • 屬性列表:應(yīng)用于少量數(shù)據(jù)存儲(chǔ),比如登陸的用戶信息,應(yīng)用程序配置信息等。只有NSString ,NSArray,NSDictory,NSData,可以WriteToFile;存儲(chǔ)的依舊是plist文件,plist文件可以存儲(chǔ)的7種數(shù)據(jù)類型:array,dictory,string,bool,data,date,number。

  • 詳細(xì)

    • 對(duì)象序列化:最終也是存為屬性列表文件,如果程序中,需要存儲(chǔ)的時(shí)候,直接存儲(chǔ)對(duì)象比較方便,例如有一個(gè)設(shè)置類,我們可以把設(shè)置類的對(duì)象直接存儲(chǔ),就沒(méi)必要再把里面的每一個(gè)屬性單獨(dú)存到文件中。對(duì)象序列化是將一個(gè)實(shí)現(xiàn)了NSCoding協(xié)議的對(duì)象,通過(guò)序列化(NSKeydArchiver)的形式,將對(duì)象中的屬性抽取出來(lái),轉(zhuǎn)化成二進(jìn)制流,也就是NSData,NSData可以選擇write to file 或者存儲(chǔ)到NSUserdefault中。 必須實(shí)現(xiàn)的兩個(gè)方法 encodeWithCoder,initWithCoder。對(duì)象序列化的本質(zhì)就是 對(duì)象NSData。

    • SQLite: 適合大量,重復(fù),有規(guī)律的數(shù)據(jù)存儲(chǔ)。而且頻繁的讀取,刪除,過(guò)濾數(shù)據(jù),這種適合使用數(shù)據(jù)庫(kù) (iOS 使用第三方FMDB)

    • CoreData: Sqlite叫做關(guān)系型數(shù)據(jù)庫(kù),CoreData 是一中OR-Mapping的思想 ,O代表對(duì)象Object,R代表relationship,Mapping代表映射,直譯過(guò)來(lái)就是對(duì)象關(guān)系映射,其實(shí)就是把對(duì)象的屬性和表中的字段自動(dòng)映射,簡(jiǎn)化程序員的負(fù)擔(dān),以面向?qū)ο蟮姆绞讲僮鲾?shù)據(jù)庫(kù)。ORMapping是一種思想,CoreData實(shí)現(xiàn)了這種思想,在Java中,hibernate 也是對(duì)ORMapping的一種實(shí)現(xiàn),只是利用java實(shí)現(xiàn)的。

    • CoreData 本質(zhì)還是數(shù)據(jù)庫(kù),只不過(guò)使用起來(lái)更加面向?qū)ο螅魂P(guān)注二維的表結(jié)構(gòu),而是只需要關(guān)注對(duì)象,純面向?qū)ο蟮臄?shù)據(jù)操作方式。我們直接使用數(shù)據(jù)庫(kù)的時(shí)候,如果向數(shù)據(jù)庫(kù)中插入數(shù)據(jù),一般是把一個(gè)對(duì)象的屬性和數(shù)據(jù)庫(kù)中某個(gè)表的字段一一對(duì)應(yīng),然后把對(duì)象的屬性存儲(chǔ)到具體的表字段中.取一條數(shù)據(jù)的時(shí)候,把表中的一行數(shù)據(jù)取出,同樣需要再封裝到對(duì)象的屬性中,這樣的方式有點(diǎn)繁瑣,不面向?qū)ο蟆oreData解決的問(wèn)題就是不需要這個(gè)中間的轉(zhuǎn)換過(guò)程,看起來(lái)是直接把對(duì)象存儲(chǔ)進(jìn)去,并且取出來(lái),不關(guān)心表的存在,實(shí)際內(nèi)部幫你做好了映射關(guān)系。


更多:iOS面試題合集

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,655評(píng)論 1 32
  • 文件 歸檔(NSKeyedArchiver) 屬性列表(NSUserDefaults) 數(shù)據(jù)庫(kù)(SQLite、Co...
    零度_不結(jié)冰閱讀 8,717評(píng)論 0 2
  • 一、文件 應(yīng)用程序包 : 這里面存放的是應(yīng)用程序的源文件,包括資源文件和可執(zhí)行文件。NSString *path ...
    今天又要上班嗎閱讀 668評(píng)論 0 2
  • 數(shù)據(jù)存儲(chǔ)的核心都是寫文件。 在iOS開(kāi)發(fā)過(guò)程中,不管是做什么應(yīng)用,都會(huì)碰到數(shù)據(jù)保存的問(wèn)題。將數(shù)據(jù)保存到本地,能夠讓...
    ZoeZhouZ閱讀 1,602評(píng)論 0 1
  • 天亮了… 我卻沒(méi)有聽(tīng)到雞鳴 我不斷的弄出各種聲音 我發(fā)現(xiàn)我能聽(tīng)見(jiàn) 抬頭尋窗外的楊桃樹(shù) 卻也沒(méi)有尋到 幡然 我置身于...
    蔡究竟閱讀 291評(píng)論 0 0

友情鏈接更多精彩內(nèi)容