这段时间一直在忙新的需求,没有时间来整理代码,发表自己技术博客,今天我们来看一下YYModel的底层解析以及如何使用,希望对大家有所帮助!
一 概述
概括
YYModel是一个轻量级的JSON模型转换库,它的思路非常清晰代码风格也很好,所以还是建议大家看一下底层实现的逻辑,也可以从源码加深对Runtime的理解。
简介
下面是YYModel第三方库的一些代码结构。

YYModel的总共文件只有5个文件

除掉YYModel.h之外,只剩下了YYClassInfo和NSObject+YYModel两个模块啦!
- YYClassInfo功能主要是将Runtime层级中的一些结构体封装到NSObject中调用;

- NSObject+YYModel功能是提供调用的接口以及实现具体的模型转换逻辑。
前面已经讲到YYClassInfo主要功能是将Runtime层级的结构体封装到NSObject层级以便调用。下面是YYClassInfo与Runtime层级对比:

二、详细
1.YYClassIvarInfo
YYClassIvarInfo && objc_ivar
下面是YYClassIvarInfo
/** Instance variable information. */@interface YYClassIvarInfo : NSObject @property (nonatomic, assign, readonly) Ivar ivar; ///< ivar opaque struct @property (nonatomic, strong, readonly) NSString *name; ///< Ivar's name @property (nonatomic, assign, readonly) ptrdiff_t offset; ///< Ivar's offset @property (nonatomic, strong, readonly) NSString *typeEncoding; ///< Ivar's type encoding @property (nonatomic, assign, readonly) YYEncodingType type; ///< Ivar's type /** Creates and returns an ivar info object. @param ivar ivar opaque struct @return A new object, or nil if an error occurs. */- (instancetype)initWithIvar:(Ivar)ivar; @end
紧接着我们看一下Runtime的objc_ivar表示变量的结构体
struct objc_ivar { char * _Nullable ivar_name OBJC2_UNAVAILABLE; // 变量名称 char * _Nullable ivar_type OBJC2_UNAVAILABLE; // 变量类型 int ivar_offset OBJC2_UNAVAILABLE;

