YYModel 源码解读 总结

在使用swfit写代码的过程中,使用了下oc写的字典转模型,发现有些属性转不成功,就萌生了阅读源码的想法。

其实一直都知道Runtime机制,但并没有系统的学习,可能是因为平时的使用比较少,无意间在github上看到了YYModel ,粗略的看了下源码,发现有大量的c方面的知识,就产生了很大的兴趣,因为c总是性能的代名词吗?于是就有了这几篇文章,其实主要的目的还是对平时所学知识的一个总结。

毕竟,人类的记忆总是容易忘记的。

不知道作者在写这个框架时的思想是怎么样一个过程?但字里行间都流露出对代码的强大的驾驭能力,这点特别值得学习。

阅读完这个框架给我最大的收获就是领悟到代码也是能表达很多事情的,比如说自信,因此决定去阅读更多更好的开源矿建,并记录下来,一来可以帮助到别人,同时也能学习到别人的思想。

好了,说一下,我理解的这样一个字典转模型的思想是什么样?

一 .  在写代码前应该有一个很好的设计,这个设计最起码是有张草图的,并不是天马星空的头脑风暴。

功能草图:

时间: 2024-10-20 22:36:37

YYModel 源码解读 总结的相关文章

YYModel 源码解读(二)之NSObject+YYModel.h (1)

本篇文章主要介绍 _YYModelPropertyMeta 前边的内容 首先先解释一下前边的辅助函数和枚举变量,在写一个功能的时候,这些辅助的东西可能不是一开始就能想出来的,应该是在后续的编码过程中 逐步添加的. #define force_inline __inline__ __attribute__((always_inline)) 这行代码用到了C语言的内联函数 内联函数: 是用inline修饰的函数,内联函数在代码层次看和普通的函数结构一样,却不具备函数的性质,内联函数不是在调用时发生控

YYModel 源码解读(二)之YYClassInfo.h (3)

前边3篇介绍了YYClassinfo 文件的组成单元,算是功能的分割,按照业务的设计思想来说,方向应该是相反的 由此引申出我们在设计api的思想其实和项目管理是很类似的----- 一些题外话 1.目的 回到代码,首先应该明确写这个类的目的是什么? 按照正常逻辑,我们需要一个类来获取我们所需要的所有和此类相关的信息 包括(类名,父类,成员变量,方法,属性...) 2.技术调研 调研我们所需要的结果是否能够通过技术手段实现 3.目标分隔,也就是任务分解 需要把整体目标分解成小目标,在本代码中则分割成

YYModel 源码解读之YYModel.h (一)

#if __has_include(<YYModel/YYModel.h>) FOUNDATION_EXPORT double YYModelVersionNumber; FOUNDATION_EXPORT const unsigned char YYModelVersionString[]; #import <YYModel/NSObject+YYModel.h> #import <YYModel/YYClassInfo.h> #else #import "

YYModel 源码解读(二)之YYClassInfo.h (1)

1 NS_ASSUME_NONNULL_BEGIN 2 NS_ASSUME_NONNULL_END 为了兼容Swift 中的 ? 和 ! oc 在6.3引入了两个新的类型注释:__nullable和__nonnull , 在字面上很好理解 可能为空, 不为空, 在上面代码中间则表示 默认的所有的属性都不能为空,这样我们在敲码的过程中只需要手写__nullable的类型就可以了  1 /** 2 Type encoding's type. 3 */ 4 typedef NS_OPTIONS(NSU

YYModel 源码解读(二)之NSObject+YYModel.h (4)

接下来我们继续向下看 typedef struct { void *modelMeta; ///< _YYModelMeta void *model; ///< id (self) void *dictionary; ///< NSDictionary (json) } ModelSetContext; 这是一个c的结构体,在c中 void * 相当于 oc 中的 id 类型 那么 为什么使用c的结构体呢,最主要的使用场景就是我们需要同时使用多个参数的情况下,可以使用c的结构体 /**

YYModel 源码解读(二)之NSObject+YYModel.h (5)

好了,之前的博文中详细的解释了一些辅助的类和辅助的函数,接下来就是使用它们来实现酷炫功能的时候,正所谓磨刀不误砍柴工啊 我们先把总的功能罗列出来 1. json转字典              + (NSDictionary *)_yy_dictionaryWithJSON:(id)json 2. json转模型              + (instancetype)yy_modelWithJSON:(id)json 3. 字典转模型              + (instancetype

YYModel 源码解读(二)之NSObject+YYModel.h (3)

本篇主要介绍的是 在真正转之前的几个辅助函数 /** Get number from property. @discussion Caller should hold strong reference to the parameters before this function returns. @param model Should not be nil. @param meta Should not be nil, meta.isCNumber should be YES, meta.get

YYModel 源码解读(二)之YYClassInfo.h (2)

1 /** 2 Instance variable information. 3 */ 4 @interface YYClassIvarInfo : NSObject 5 @property (nonatomic, assign, readonly) Ivar ivar; ///< ivar opaque struct 6 @property (nonatomic, strong, readonly) NSString *name; ///< Ivar's name 7 @property (

AFNetworking 3.0 源码解读 总结

终于写完了 AFNetworking 的源码解读.这一过程耗时数天.当我回过头又重头到尾的读了一篇,又有所收获.不禁让我想起了当初上学时的种种情景.我们应该对知识进行反复的记忆和理解.下边是我总结的 AFNetworking 中能够学到的知识点. 1.枚举(enum) 使用原则:当满足一个有限的并具有统一主题的集合的时候,我们就考虑使用枚举.这在很多框架中都验证了这个原则.最重要的是能够增加程序的可读性. 示例代码: /** * 网络类型 (需要封装为一个自己的枚举) */ typedef NS