一 . 簡單說明
在使用plist進行數(shù)據(jù)的存儲和讀取,只適用系統(tǒng)自帶的一些常用類型才能用,且必須先獲取路勁相對麻煩.?
偏好設(shè)置(將所有的東西都保存在同一個文件夾下面,且主要用于存儲應用的設(shè)置信息)
歸檔:因為前兩者都有一個致命的缺陷,只能存儲常用的類型.歸檔可以實現(xiàn)把自定義的對象存放在文件夾中.
歸檔的方式就是將數(shù)據(jù)通過密文的方式存儲,或者說可以通過二進制進行存儲.
如果對象是NSString,NSDictionary,NSArray,NSData,NSNuber等類型,就可以直接使用NSKeyedArchiver進行歸檔和恢復.
然而并不是所有的對象都可以直接使用這種方法進行歸檔,只用遵循了NSCoding協(xié)議的對象才可以.
歸檔的數(shù)據(jù)依然也是存在Documents的文件夾下面.并且plist文件也是存在Doucuments文件夾下面,由此可見Doucments問價存儲著相對重要的文件.
歸檔的缺點:歸檔的形式來存儲數(shù)據(jù),只能一次性歸檔保存以及一次性解壓.所以只能針對小數(shù)量數(shù)據(jù),而且對數(shù)據(jù)操作比較笨拙,如果想改動數(shù)據(jù)的某一部分,還需要解壓整個數(shù)據(jù)或者歸檔整個數(shù)據(jù).
二. 使用archiveRootObject 進行簡單的歸檔
使用NSKeyedAricchiver進行歸檔,NSKeyedUnarchiver進行解檔,這種方式會在寫入,讀出數(shù)據(jù)之前對數(shù)據(jù)進行序列化,反序列化操作.
控制臺上顯示:
這種歸檔的方式存在一個缺點,就是只能把一個對象歸檔進一個文件中,不能對多個對象進行歸檔.
三.對多個對象的歸檔.
同樣是使用NSKeyedArchiver進行歸檔,不同的是同時歸檔多個對象.
可以看出對多個對象進行歸檔還是很方便的,現(xiàn)在我就需要考慮自定義類型的數(shù)據(jù)怎么存儲.
四 對自定義對象進行歸檔
==============創(chuàng)建一個遵守 NSCoding 協(xié)議的類 ================= ??
=========創(chuàng)建一個導入了 自定義Model類的控制器 ViewController =========
自定義對象歸檔/解檔總結(jié):?
1.如果要存儲自定義對象一定要用“歸檔/解檔”的操作轴总;
?2.plist.偏好設(shè)置都不能用來存儲自定義的對象录豺;?
3.自定義對象歸檔/解檔的時候一定要遵守的協(xié)議菜秦;
?4.只要解析文件都會調(diào)用initWithCoder:的方法晰房;?
?5.在解檔屬性的時候濒旦,記得給屬性賦值!!!!?
6.為什么要遵守協(xié)議? 為了告訴系統(tǒng)歸檔/解檔哪些屬性勇垛,告訴系統(tǒng)如何進行歸檔解檔胜卤。
注意:
如果父類也遵守了NSCoding協(xié)議丧靡,請注意:
a. 應該在encodeWithCoder:方法中加上一句:[super encodeWithCode:encode];確保繼承的實例變量也能被編碼,即也能被歸檔歉秫。
b. 應該在initWithCoder:方法中加上一句:self = [super initWithCoder:decoder];確保繼承的實例變量也能被解碼华临,即也能被恢復。
c.? 一般繼承自 NSObject 的類不需要寫super方法端考,因為NSObject作為基類并沒有遵守NSCoding協(xié)議,但是在解檔時要寫上self = [super init]揭厚。