序言:
最近因為項目中需要用到自定義模型的歸檔,所以留意了些歸解檔的代碼。但大多數(shù)代碼都是寫的比較簡單模型,所以歸解檔 so easy!? 那么問題來了,如果項目中的模型比較復(fù)雜,可能里三層外三層,你還愿意key,value的寫嗎?所以這里決定偷個懶,想了想那就用runtime吧!
為什么 需要用到 歸檔 解檔呢
首先來聊聊歸檔解檔的優(yōu)勢,如果模型很復(fù)雜,解析不方便,或者不利于存儲數(shù)據(jù)庫,那么歸檔則是個不錯的方式。歸檔后,模型會以NsDate類型被寫進(jìn)文件中;解檔后,這個模型又會被讀取出來。不需要解析神馬的!
實現(xiàn) 歸解檔
1,首先,自定義類要遵循協(xié)議 <NSCoding>
2.實現(xiàn)自定義類中歸檔方法:
-(void)encodeWithCoder:(NSCoder *)aCoder;
3.實現(xiàn)自定義類中解檔方法:
- (instancetype )initWithCoder:(NSCoder *)aDecoder;
如果自定義模型里面有很多個屬性,那么歸解檔方法里面是不是就會瘋狂的寫
[aCoderencodeObject:obj forKey:key] 或者 [aDecoder decodeObjectForKey:key] 方法;
所以最簡單的實現(xiàn)就是通過運行時取獲取當(dāng)前類里面所有的屬性,循環(huán)遍歷類中所有的屬性,并且 根據(jù)屬性名和屬性值依次調(diào)用 歸解檔方法;這里在對屬性的賦值與取值時是用的kvc,間接調(diào)用可以避免 基礎(chǔ)數(shù)據(jù)類型 不能通過反射機(jī)制調(diào)用set或者get方法;
下面既是核心代碼:
創(chuàng)建一個分類NSObject (Archiving)


在需要歸檔的自定義類中導(dǎo)入該分類
這里歸解檔就已經(jīng)寫完,如果你還在一個個得手敲key,Value是不是會崩潰掉!
Demo的鏈接地址:代碼地址
代碼中已經(jīng)把歸解檔的方法封裝成了工具類,簡單好用!