iOS 歸解檔的簡(jiǎn)單實(shí)現(xiàn)

序言:

最近因?yàn)轫?xiàng)目中需要用到自定義模型的歸檔,所以留意了些歸解檔的代碼。但大多數(shù)代碼都是寫的比較簡(jiǎn)單模型,所以歸解檔 so easy!? 那么問題來了,如果項(xiàng)目中的模型比較復(fù)雜,可能里三層外三層,你還愿意key,value的寫嗎?所以這里決定偷個(gè)懶,想了想那就用runtime吧!


為什么 需要用到 歸檔 解檔呢

首先來聊聊歸檔解檔的優(yōu)勢(shì),如果模型很復(fù)雜,解析不方便,或者不利于存儲(chǔ)數(shù)據(jù)庫(kù),那么歸檔則是個(gè)不錯(cuò)的方式。歸檔后,模型會(huì)以NsDate類型被寫進(jìn)文件中;解檔后,這個(gè)模型又會(huì)被讀取出來。不需要解析神馬的!

實(shí)現(xiàn) 歸解檔

1,首先,自定義類要遵循協(xié)議 <NSCoding>

2.實(shí)現(xiàn)自定義類中歸檔方法:

-(void)encodeWithCoder:(NSCoder *)aCoder;

3.實(shí)現(xiàn)自定義類中解檔方法:

- (instancetype )initWithCoder:(NSCoder *)aDecoder;

如果自定義模型里面有很多個(gè)屬性,那么歸解檔方法里面是不是就會(huì)瘋狂的寫

[aCoderencodeObject:obj forKey:key] 或者 [aDecoder decodeObjectForKey:key] 方法;

所以最簡(jiǎn)單的實(shí)現(xiàn)就是通過運(yùn)行時(shí)取獲取當(dāng)前類里面所有的屬性,循環(huán)遍歷類中所有的屬性,并且 根據(jù)屬性名和屬性值依次調(diào)用 歸解檔方法;這里在對(duì)屬性的賦值與取值時(shí)是用的kvc,間接調(diào)用可以避免 基礎(chǔ)數(shù)據(jù)類型 不能通過反射機(jī)制調(diào)用set或者get方法;

下面既是核心代碼:

創(chuàng)建一個(gè)分類NSObject (Archiving)

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

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

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

Demo的鏈接地址:代碼地址

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

最后編輯于
?著作權(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)容

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