随笔分类 - 源码阅读系列
摘要:在使用swfit写代码的过程中,使用了下oc写的字典转模型,发现有些属性转不成功,就萌生了阅读源码的想法。 其实一直都知道Runtime机制,但并没有系统的学习,可能是因为平时的使用比较少,无意间在github上看到了YYModel ,粗略的看了下源码,发现有大量的c方面的知识,就产生了很大的兴趣,
阅读全文
摘要:好了,之前的博文中详细的解释了一些辅助的类和辅助的函数,接下来就是使用它们来实现酷炫功能的时候,正所谓磨刀不误砍柴工啊 我们先把总的功能罗列出来 1. json转字典 + (NSDictionary *)_yy_dictionaryWithJSON:(id)json 2. json转模型 + (in
阅读全文
摘要:接下来我们继续向下看 这是一个c的结构体,在c中 void * 相当于 oc 中的 id 类型 那么 为什么使用c的结构体呢,最主要的使用场景就是我们需要同时使用多个参数的情况下,可以使用c的结构体 上边的代码的主要作用是 根据 一个 id 类型的_value 一个 id 类型的_key 和_con
阅读全文
摘要:本篇主要介绍的是 在真正转之前的几个辅助函数 这个函数的目的 是 把 _YYModelPropertyMeta.isCNumber == YES 的情况转成NSNumber 下边这个方法是 把 NSNumber 赋值给 原有c 属性 下边的这个方法是核心方法, 把值 赋值给model 需要的参数 有
阅读全文
摘要:_YYModelMeta 这个内部的类主要是对这个类的描述。包含了和此类转换相关的数据。 + (NSDictionary *)modelCustomPropertyMapper { return @{@"userID" : @"id", @"idString" : @"idstr", } 2. 多个
阅读全文
摘要:本篇文章主要介绍 _YYModelPropertyMeta 前边的内容 首先先解释一下前边的辅助函数和枚举变量,在写一个功能的时候,这些辅助的东西可能不是一开始就能想出来的,应该是在后续的编码过程中 逐步添加的。 这行代码用到了C语言的内联函数 内联函数: 是用inline修饰的函数,内联函数在代码
阅读全文
摘要:前边3篇介绍了YYClassinfo 文件的组成单元,算是功能的分割,按照业务的设计思想来说,方向应该是相反的 由此引申出我们在设计api的思想其实和项目管理是很类似的 一些题外话 1.目的 回到代码,首先应该明确写这个类的目的是什么? 按照正常逻辑,我们需要一个类来获取我们所需要的所有和此类相关的
阅读全文
摘要:上边代码通过创建Ivar(成员变量)的 抽象类, 返回我们需要的关于Ivar 的信息, 通过一个初始化方法创建,接下来我们看看该方法的具体实现 ivar_getOffset函数,对于类型id或其它对象类型的实例变量,可以调用object_getIvar和object_setIvar来直接访问成员变量
阅读全文
摘要:为了兼容Swift 中的 ? 和 ! oc 在6.3引入了两个新的类型注释:__nullable和__nonnull , 在字面上很好理解 可能为空, 不为空, 在上面代码中间则表示 默认的所有的属性都不能为空,这样我们在敲码的过程中只需要手写__nullable的类型就可以了 上边的代码 就涉及到
阅读全文
摘要:__has_include 此宏传入一个你想引入文件的名称作为参数,如果该文件能够被引入则返回1,否则返回0。 拓展: #include / #import 语句有两种方式包含头文件,分别是使用双引号" "与左右尖括号< >。其区别是(对于不是使用完全文件路径名的)头文件的搜索顺序不同 使用双引号"
阅读全文