iOS 歸解檔的簡單實現(xiàn)

序言:

最近因為項目中需要用到自定義模型的歸檔,所以留意了些歸解檔的代碼。但大多數(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)

獲取該類的所有屬性
實現(xiàn)NSCoding

在需要歸檔的自定義類中導(dǎo)入該分類

這里歸解檔就已經(jīng)寫完,如果你還在一個個得手敲key,Value是不是會崩潰掉!

Demo的鏈接地址:代碼地址

代碼中已經(jīng)把歸解檔的方法封裝成了工具類,簡單好用!

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

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

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