Mantle源代码阅读笔记 一

本文详细记录了阅读Mantle源代码的心得体会,主要探讨了从NSDictionary转换到Model的过程,包括Transform和赋值操作。同时,也深入研究了Model如何转换回NSDictionary,以及Mantle实现NSCoding协议的encode和decode方法,为理解和使用Mantle提供了深入理解。
摘要由CSDN通过智能技术生成
最近的项目需求需要持久化一些对象,由于只是一些比较简单的数据,使用NSUserDefaults进行存储即可。之前实现过比较简单自动archive和unarchive的操作。原理很简单,遍历NSObject的property list,然后通过valueForKey:和setValue:forKey:方法进行操作。这种实现不能满足我的新需求,我的新需求需要做到将property为其他类型的对象也做到自动archive和unarchive,再加上JSON解析方面的工作量,直接粗暴通过硬编码实现会产生一大堆verbose的代码,自己实现需要自动化archive和unarchive的代码需要的工作量较大。于是顺便看了一下Mantle的源代码,发现其中这方面的处理很不错,各方面很合理,就通过这个实现了。

Mantle解析JSON或者NSCoding操作我认为实际上都可以分成两个大步骤来阅读: Transform赋值 。Mantle的源代码不是很多,但是代码很干净,注释也很完善。

我把全部文件根据我认为的步骤进行了一下分类:
1. Transform相关:
MTLJSONAdapter
MTLManagedObjectAdapter
MTLValueTransformer
NSValueTransformer+MTLInversionAdditions
NSValueTransformer+MTLPredefinedTransformerAdditions
MTLModel+NSCoding

2.赋值相关:
MTLModel

3.工具类:
MTLReflection:
NSArray+MTLManipulationAdditions
NSDictionary+MTLManipulationAdditions
NSError+MTLModelException
NSObject+MTLComparisonAdditions

4. extobjc:
          MTLEXTKeyPathCoding
          MTLEXTRuntimeExtension
          MTLEXTScope
          metamacros


从NSDictionary到Model


把JSON数据解析为Model只需要下面两行代码即可:


Transform过程


从JSON转换到model,方法入口是在 MTLJSONAdapter 的 modelOfClass:fromJSONDictionary:error: ,详细逻辑的实现方法是 - (id)initWithJSONDictionary:modelClass:error: 。这个方法在入口处进行了assert,modelClass的类型必须是MTLModel的子类,同时modelClass必须实现MTLJSONSerializing protocol。



接下来就是上面这段代码,这段代码比较有意思,它涉及到一个我们经常使用却不太在意的东西,类簇(class cluster),这个设计模式在Cocoa中使用很广泛,最明显的例子是NSNumber,关于class cl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值