yymodel

YYModel 源码解读 总结

旧时模样 提交于 2020-02-02 06:01:10
在使用swfit写代码的过程中,使用了下oc写的字典转模型,发现有些属性转不成功,就萌生了阅读源码的想法。 其实一直都知道Runtime机制,但并没有系统的学习,可能是因为平时的使用比较少,无意间在github上看到了YYModel ,粗略的看了下源码,发现有大量的c方面的知识,就产生了很大的兴趣,因为c总是性能的代名词吗?于是就有了这几篇文章,其实主要的目的还是对平时所学知识的一个总结。 毕竟,人类的记忆总是容易忘记的。 不知道作者在写这个框架时的思想是怎么样一个过程?但字里行间都流露出对代码的强大的驾驭能力,这点特别值得学习。 阅读完这个框架给我最大的收获就是领悟到代码也是能表达很多事情的,比如说自信,因此决定去阅读更多更好的开源矿建,并记录下来,一来可以帮助到别人,同时也能学习到别人的思想。 好了,说一下,我理解的这样一个字典转模型的思想是什么样? 一 . 在写代码前应该有一个很好的设计,这个设计最起码是有张草图的,并不是天马星空的头脑风暴。 功能草图: 二. 有了上边的图表,就已经很明确我们的目标是什么了。因为市场上已经有这样的框架存在,所以说技术上是肯定能够实现的,可以不同的是实现手段而已。在这里先不对具体的技术进行归类,只是列出一个大概的技术需求 来源: https://www.cnblogs.com/machao/p/5651038.html

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

女生的网名这么多〃 提交于 2020-02-02 05:06:34
#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 "NSObject+YYModel.h" #import "YYClassInfo.h" #endif __has_include 此宏传入一个你想引入文件的名称作为参数,如果该文件能够被引入则返回1,否则返回0。 拓展: #include / #import 语句有两种方式包含头文件,分别是使用双引号 " " 与左右尖括号 < > 。其区别是(对于不是使用完全文件路径名的)头文件的搜索顺序不同 使用双引号 " " 的头文件的搜索顺序: 包含该 #include 语句的源文件所在目录; 包含该 #include 语句的源文件的已经打开的头文件的逆序; 编译选项-I所指定的目录 环境变量INCLUDE所定义的目录 使用左右尖括号 < > 的头文件的搜索顺序: 编译选项-I所指定的目录 环境变量INCLUDE所定义的目录 再来介绍下

YYModel的底层实现原理

匿名 (未验证) 提交于 2019-12-03 00:22:01
实际使用时,需要对其遍历,取出容器中得字典,然后继续字典转模型。( YYModel 的核心是通过 runtime 获取结构体中得 Ivars 的值,将此值定义为 key, 然后给 key 赋 value 值,所以我们需要自己遍历容器( NSArray , NSSet , NSDictionary ),获取每一个值,然后 KVC )总结起来就是: 底层核心是 运用runtime获取类结构体中Ivars,进行KVC操作,然后根据不同情况进行分别处理 。 1.Model 属性名和 JSON 中的 Key 不相同 // JSON: { "n" : "Harry Pottery" , "p" : 256 , "ext" : { "desc" : "A book written by J.K.Rowing." }, "ID" : 100010 } // Model: @interface Book : NSObject @property NSString *name; @property NSInteger page; @property NSString *desc; @property NSString *bookID; @end @implementation Book //返回一个 Dict,将 Model 属性名对映射到 JSON 的 Key。 + ( NSDictionary *