iOS:YYModel

iOS:YYModel


github:https://github.com/ibireme/YYModel   

做人不能偷太多懒,现在就开始翻翻源码吧。。。顺路复习一个

先留下一点资料看源码时或许会用到: 

http://www.jianshu.com/users/aa41dad549af/latest_articles

http://www.cnblogs.com/machao/p/5514921.html

http://xiongzenghuidegithub.github.io/blog/2016/01/29/yymodel-part-1/

iOS:YYModel_第1张图片
我是YYModel文件夹...

YYModel.h

iOS:YYModel_第2张图片
YYModel.h

NSObject+YYModel.h

差点就忽略了一点..

Nullability: Xcode6.3 开始支持的特性 在Swift中经常使用到的是!、?


特性展示

新特性的话我是一般用于函数的参数上,这样我就不必要做太多的判断

文件包含一个NSObject 的分类NSObject+YYModel.h

而NSObject+YYModel.h 文件上开头以及结尾所提到的:

NS_ASSUME_NONNULL_BEGIN    #define NS_ASSUME_NONNULL_BEGIN  _Pragma("clang assume_nonnull begin")

NS_ASSUME_NONNULL_END     #define NS_ASSUME_NONNULL_END  _Pragma("clang assume_nonnull end")

在这对宏之间的属性,方法的参数都默认被nonnull所修饰,需要nullable修饰的话要主动加上,像上图那样


在NSObject+YYModel.h中....其实里面写的不止是NSObject分类  还分别对NSDictionary、NSArray添加了自定义的方法...还有定义了几个类....很精彩

+ (nullable instancetype)yy_modelWithJSON:(id)json;

将一个请求得到的response转model    /*这个response  的类型仅限定为NSDictionary、NSString、NSData*/

试试水先...

iOS:YYModel_第3张图片
A.h //model


iOS:YYModel_第4张图片
在AFNetworking中解析请求下来的数据

细看转模型的方法:


内部通过判别传入值是否为NSDictionary 、NSString抑或是NSData 类型 最终返回一个NSDictionary类型,传值仅限这3种类型传错了那就是nil咯

iOS:YYModel_第5张图片

再看return的返回值

+ (nullable instancetype)yy_modelWithDictionary:(NSDictionary*)dictionary;

iOS:YYModel_第6张图片

简单地来一个字典转model 的一个小尝试:

iOS:YYModel_第7张图片
直接使用

这里有一个类_YYModelMeta:   一般的话类名并不会用_开头,虽然也可以用$,习惯上都是以大驼峰法作为类的命名写法。至于作者的想法我就不得而知了。

点开方法内部阅读,真的很精彩....如果你读过runtime源码,你会发现有惊人的相似...   思路应该与此相似吧,可见YYModel作者对于底层的熟悉。

iOS:YYModel_第8张图片
runtime 中 objc_class 与  YYClassInfo : NSObject  对比

额,毕竟一个是结构体、一个是类,看到这我想起了结构体与类的区别

再继续

iOS:YYModel_第9张图片

另外的话

你可能感兴趣的:(底层)