文档章节

github-YYModel

BKF_
 BKF_
发布于 2016/03/02 23:18
字数 573
阅读 865
收藏 0

这里是简单描述---详情

0.使用原因:

    1)Benchmark测试的时候,速度块
    2)代码量少,以前一直用 MJExtension
    3)使用简单方便。
    
1.使用方法(github上比较详细)
    1.1简单的 Model 与 JSON 相互转换
        1)将 JSON (NSData,NSString,NSDictionary) 转换为 Model:
        User *user = [User yy_modelWithJSON:json];

        2)将 Model 转换为 JSON 对象:
        NSDictionary *json = [user yy_modelToJSONObject];

        3)Model 属性名和 JSON 中的 Key 不相同
        // Model: Book
        //在model类中实现一个静态方法,返回一个 Dict,将 Model 属性名对映射到 JSON 的 Key。
        + (NSDictionary *)modelCustomPropertyMapper {
                return @{@"name" : @"n",
                         @"page" : @"p",
                         @"desc" : @"ext.desc",
                         @"bookID" : @[@"id",@"ID",@"book_id"]};
        }

        4)Model 包含其他 Model
        Model: 什么都不用做,转换会自动完成


    1.2容器类属性
    返回容器类中的所需要存放的数据类型 (以 Class 或 Class Name 的形式)。
    + (NSDictionary *)modelContainerPropertyGenericClass {
            return @{
                        @"shadows" : [Shadow class],
                     @"borders" : Border.class,
                     @"attachments" : @"Attachment" };
        }

    1.3黑名单与白名单
        // 如果实现了该方法,则处理过程中会忽略该列表内的所有属性
        + (NSArray *)modelPropertyBlacklist {
                return @[@"test1", @"test2"];
        }
        // 如果实现了该方法,则处理过程中不会处理该列表外的属性。
        + (NSArray *)modelPropertyWhitelist {
                return @[@"name"];
        }

    1.4数据校验与自定义转换
 

// JSON:
{
    "name":"Harry",
    "timestamp" : 1445534567
}

// Model:
@interface User
@property NSString *name;
@property NSDate *createdAt;
@end

@implementation User
// 当 JSON 转为 Model 完成后,该方法会被调用。
// 你可以在这里对数据进行校验,如果校验不通过,可以返回 NO,则该 Model 会被忽略。
// 你也可以在这里做一些自动转换不能完成的工作。
- (BOOL)modelCustomTransformFromDictionary:(NSDictionary *)dic {
    NSNumber *timestamp = dic[@"timestamp"];
    if (![timestamp isKindOfClass:[NSNumber class]]) return NO;
    _createdAt = [NSDate dateWithTimeIntervalSince1970:timestamp.floatValue];
    return YES;
}

// 当 Model 转为 JSON 完成后,该方法会被调用。
// 你可以在这里对数据进行校验,如果校验不通过,可以返回 NO,则该 Model 会被忽略。
// 你也可以在这里做一些自动转换不能完成的工作。
- (BOOL)modelCustomTransformToDictionary:(NSMutableDictionary *)dic {
    if (!_createdAt) return NO;
    dic[@"timestamp"] = @(n.timeIntervalSince1970);
    return YES;
}
@end

Coding/Copying/hash/equal/description

@interface YYShadow :NSObject <NSCoding, NSCopying>
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) CGSize size;
@end

@implementation YYShadow
// 直接添加以下代码即可自动完成
- (void)encodeWithCoder:(NSCoder *)aCoder { [self yy_modelEncodeWithCoder:aCoder]; }
- (id)initWithCoder:(NSCoder *)aDecoder { self = [super init]; return [self yy_modelInitWithCoder:aDecoder]; }
- (id)copyWithZone:(NSZone *)zone { return [self yy_modelCopy]; }
- (NSUInteger)hash { return [self yy_modelHash]; }
- (BOOL)isEqual:(id)object { return [self yy_modelIsEqual:object]; }
- (NSString *)description { return [self yy_modelDescription]; }

© 著作权归作者所有

共有 人打赏支持
上一篇: 1.NSString+category
下一篇: github 上常用的
BKF_
粉丝 1
博文 21
码字总数 4291
作品 0
广州
私信 提问
从YYModel源码中可以学到什么:前篇

前言 一个高性能模型框架。 作者在上给出的性能对比图(iphone 6 y:时间) :具体以下特点:高性能、自动类型转换、类型安全、非侵入性、轻量等。 关于如何使用查看文档和示例【传送门】。 本...

Owenli_千
2017/12/29
0
0
又一个高性能轻量级的iOS模型框架YYModel

前言 iOS的模型框架其实有很多了,去年研究过,也了解过、,最近的项目项目优化的时候,再次考虑,基于轻量级、高性能的考虑,最终选择了。 项目主页 YYModel 简介 YYModel在Github的简介是,...

刘星石
2016/03/29
438
0
从YYModel源码中可以学到什么:后篇

前言 上一篇中《从YYModel源码中可以学到什么:后篇》中主要学习了的源码结构,只是分享了整体结构。 承接上篇,本文将解读如何进行JSON模型转换的,接下来一起揭开的神秘面纱吧! 目录 JSON...

Owenli_千
2017/12/29
0
0
YYModel的介绍与使用

最近有时间就来看看之前一直想了解的YYModel,下面开始直奔主题。 介绍 iOS / OSX高性能模型框架。(YYmodel是来自组件YYKit) 性能 时间成本(过程GithubUser 10000次iPhone 6): 1-0.png Manu...

宵衣旰食
2016/11/25
0
0
zhangs3721/ZZMonster

ZZMonster(兼容YYModel) 纯代码编写,无需安装任何插件,一个方法轻松搞定复杂Json转Model。(兼容YYModel) 示例: 1.下载ZZMonster并导入项目中。ZZMonster目录: 2.导入头文件 ,调用此...

zhangs3721
2018/09/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

redis高级进阶(2)

本篇主要介绍如下内容 1.redis服务器数据库 2.redis对过期键的处理 3.redis持久化策略 1.redis服务器数据库 redis服务器如果不指定数据库的具体数据,默认是16个数据库。 客户端连接到redis...

求是科技
14分钟前
0
0
js时间Date对象介绍及解决getTime转换为8点的问题

前言   在做时间转换的时候,发现用“2016-04-12”转出来的时间戳是 2016-04-12 08:00的时间点,而不是0点。 new Date('2016-04-12').getTime();// 1460419200000 new Date(1460419...

Jack088
23分钟前
1
0
Dubbo 实践,演进及未来规划

Dubbo 整体介绍 Dubbo 是一款高性能,轻量级的 Java RPC 框架。虽然它是以 Java 语言来出名的,但是现在我们生态里面已经有 Go、Python、PHP、Node.JS 等等语言。 Dubbo 是一个 RPC 框架,它...

微笑向暖wx
23分钟前
1
0
用Python建立最简单的web服务器

前提:已装好python,mac默认已有 参考:https://www.cnblogs.com/xuxn/archive/2011/02/14/build-simple-web-server-with-python.html 利用Python自带的包可以建立简单的web服务器。在DOS里...

Liens
25分钟前
1
0
MaxCompute安全管理指南-基础篇

背景及目的 方便和辅助MaxCompute的project owner或安全管理员进行project的日常安全运维,保障数据安全。 MaxCompute有安全模型,DataWorks也有安全模型,当通过DataWorks使用MaxCompute,而...

阿里云官方博客
34分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部