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/


我是YYModel文件夹...

YYModel.h


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*/

试试水先...


A.h //model



在AFNetworking中解析请求下来的数据

细看转模型的方法:


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


再看return的返回值

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


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


直接使用

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

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


runtime 中 objc_class 与  YYClassInfo : NSObject  对比

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

再继续


另外的话

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值