- (instancetype)initWithMethod:(Method)method;
##YYClassPropertyInfo
类结构中包含name、getter、setter属性,用于保存成员属性的信息。通过以下函数进行赋值
- (instancetype)initWithProperty:(objc_property_t)property;
##YYClassInfo
类结构中包含superCls、metaCls、name等一些类相关的信息。同时也将上述三个类做为类的一部分。通过以下函数进行赋值。
+ (nullable instancetype)classInfoWithClass:(Class)cls;
此函数做了2部分工作,1)判断是否有缓存,有的话就取缓存数据 2)没有缓存数据的话通过以下函数进行赋值然后缓存。
- (instancetype)initWithClass:(Class)cls;
_YYModelPropertyMeta
类结构中主要包含
YYClassPropertyInfo对象、
name、mappedToKey等一些相关的信息,用来描述当前实例的属性信息。
通过以下函数进行赋值
+ (instancetype)metaWithClassInfo:(YYClassInfo *)classInfo propertyInfo:(YYClassPropertyInfo *)propertyInfo generic:(Class)generic;
_YYModelMeta
类结构中包含了当前类的信息和不同情况下的属性数组。看定义的类结构最直观。
@interface _YYModelMeta : NSObject {
YYClassInfo *_classInfo;
/// Key:mapped key and key path, Value:_YYModelPropertyMeta.
NSDictionary *_mapper;
/// Array, all property meta of this model.
NSArray *_allPropertyMetas;
/// Array, property meta which is mapped to a key path.
NSArray *_keyPathPropertyMetas;
/// Array, property meta which is mapped to multi keys.
NSArray *_multiKeysPropertyMetas;
/// The number of mapped key (and key path), same to _mapper.count.
NSUInteger _keyMappedCount;
//剩下的省略。。
}
看完类的大致结构,再来看下从调用YYModel提供给我们的接口开始,函数之间是如何跳转的,传入的参数又经过了那几道转换。
###yy_modelWithJSON
该接口接受NSDictionary, NSString,NSData三种类型的json串,返回一个新的是实例对象。实现主要包含以下两部分,重点在第二个函数实现。
[self _yy_dictionaryWithJSON:json] //转成NSDictionary类型数据
[self yy_modelWithDictionary:dic] //传入NSDictionary数据,返回实例对象
来看下yy_modelWithDictionary是如何将dic数据转换成对象的。核心的函数也是两个。
//根据调用的类,对YYClassIvarInfo、YYClassMethodInfo、YYClassPropertyInfo、YYClassInfo、_YYModelPropertMeta、_YYModelMeta进行赋值
[_YYModelMeta metaWithClass:cls]
//对类的属性进行赋值操作
[one yy_modelSetWithDictionary:dictionary]
通过这3个函数就实现了json串到对象的转换,看似简单,其实函数中还包含不少逻辑,还是以图的形式来的实在。看下图,函数的执行顺序从左到右
该函数的流程相对简单点,从_YYModelMeta获取相关的数据赋值给NSDictionary对象。不再做扩展。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
推荐学习资料
- 脑图
备注Android)**
[外链图片转存中…(img-LNm2iSAP-1712012773591)]
推荐学习资料
- 脑图
[外链图片转存中…(img-lBjd1mlb-1712012773591)]
[外链图片转存中…(img-5BXe7NC9-1712012773592)]
[外链图片转存中…(img-oKK8ISo5-1712012773592)]