序言:
最近因?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)


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