-
綜合
所有的本地持久化數(shù)據(jù)存儲的本質都是寫文件循签,而且只能存到沙盒中。
沙盒機制是蘋果的一項安全機制疙咸,本質就是系統(tǒng)給每個應用分配了一個文件夾來存儲數(shù)據(jù)县匠,而且每個應用只能訪問分配給自己的那個文件夾,其他應用的文件夾是不能訪問的撒轮。
數(shù)據(jù)存儲的核心都是寫文件乞旦。主要有四種持久化方式:屬性列表,對象序列化题山,SQLite 數(shù)據(jù)庫, CoreData
屬性列表:應用于少量數(shù)據(jù)存儲兰粉,比如登陸的用戶信息,應用程序配置信息等顶瞳。只有NSString 玖姑,NSArray愕秫,NSDictory,NSData焰络,可以WriteToFile戴甩;存儲的依舊是plist文件,plist文件可以存儲的7種數(shù)據(jù)類型:array闪彼,dictory甜孤,string,bool畏腕,data缴川,date,number郊尝。
-
詳細
對象序列化:最終也是存為屬性列表文件二跋,如果程序中,需要存儲的時候流昏,直接存儲對象比較方便扎即,例如有一個設置類,我們可以把設置類的對象直接存儲况凉,就沒必要再把里面的每一個屬性單獨存到文件中谚鄙。對象序列化是將一個實現(xiàn)了NSCoding協(xié)議的對象,通過序列化(NSKeydArchiver)的形式刁绒,將對象中的屬性抽取出來闷营,轉化成二進制流,也就是NSData知市,NSData可以選擇write to file 或者存儲到NSUserdefault中傻盟。 必須實現(xiàn)的兩個方法 encodeWithCoder,initWithCoder嫂丙。對象序列化的本質就是 對象NSData娘赴。
SQLite: 適合大量,重復跟啤,有規(guī)律的數(shù)據(jù)存儲诽表。而且頻繁的讀取,刪除隅肥,過濾數(shù)據(jù)竿奏,這種適合使用數(shù)據(jù)庫 (iOS 使用第三方FMDB)
CoreData: Sqlite叫做關系型數(shù)據(jù)庫,CoreData 是一中OR-Mapping的思想 腥放,O代表對象Object泛啸,R代表relationship,Mapping代表映射秃症,直譯過來就是對象關系映射平痰,其實就是把對象的屬性和表中的字段自動映射汞舱,簡化程序員的負擔,以面向對象的方式操作數(shù)據(jù)庫宗雇。ORMapping是一種思想昂芜,CoreData實現(xiàn)了這種思想,在Java中赔蒲,hibernate 也是對ORMapping的一種實現(xiàn)泌神,只是利用java實現(xiàn)的。
CoreData 本質還是數(shù)據(jù)庫舞虱,只不過使用起來更加面向對象欢际,不關注二維的表結構,而是只需要關注對象矾兜,純面向對象的數(shù)據(jù)操作方式损趋。我們直接使用數(shù)據(jù)庫的時候,如果向數(shù)據(jù)庫中插入數(shù)據(jù)椅寺,一般是把一個對象的屬性和數(shù)據(jù)庫中某個表的字段一一對應浑槽,然后把對象的屬性存儲到具體的表字段中.取一條數(shù)據(jù)的時候,把表中的一行數(shù)據(jù)取出返帕,同樣需要再封裝到對象的屬性中桐玻,這樣的方式有點繁瑣,不面向對象荆萤。CoreData解決的問題就是不需要這個中間的轉換過程镊靴,看起來是直接把對象存儲進去,并且取出來链韭,不關心表的存在偏竟,實際內部幫你做好了映射關系。
更多:iOS面試題合集