文档章节

github-YYModel

BKF_
 BKF_
发布于 2016/03/02 23:18
字数 573
阅读 743
收藏 0
点赞 1
评论 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]; }

© 著作权归作者所有

共有 人打赏支持
BKF_
粉丝 1
博文 21
码字总数 4291
作品 0
广州
从YYModel源码中可以学到什么:前篇

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

Owenli_千
2017/12/29
0
0
iOS JSON 模型转换库评测

iOS 开发中总会用到各种 JSON 模型转换库,这篇文章将会对常见的几个开源库进行一下评测。评测的内容主要集中在性能、功能、容错性这几个方面。 评测的对象: Manually 手动进行 JSON/Model...

hejunbinlan
2016/01/13
47
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
XZ_Swift之YYModel 实现嵌套的字典转模型出现的问题的解决

使用YYModel 实现嵌套的字典转模型时,如果返回数据中,包含数组,就需要实现 modelContainerPropertyGenericClass 方法。 原因:数组用 OC 运行时,因为数组中保存的是 id 类型的,所以判断...

understand_xz
01/02
0
0
处理网络API和模型对象的控制器--GQDataController

GQDataController是一种专门用于处理网络API和模型对象的控制器,你可以理解为MVVM或者MVC-N构架。 GQDataController使用AFNetworking的AFHTTPSessionManager处理网络请求,并将结果转换成模...

被山塞的骨头鱼
2016/08/01
161
0
NSOperation 简介和应用

基本介绍 NSBlockOperation 打印内容 打印纪录 取消操作 [operation cancel]; NSOperation的依赖关系 MyDownloadOperation downloadOp = [[MyDownloadOperation alloc] init]; // MyDownload......

云飞扬v5
2016/11/12
1
0
YYModel 源码剖析:关注性能

前言 json与模型的转换框架很多,YYModel 一出,性能吊打同类组件,终于找了些时间观摩了一番,确实收益颇多,写下此文作为分享。 由于该框架代码比较多,考虑到突出重点,压缩篇幅,不会有太...

indulge_in
06/16
0
0
iOS 组件合集--YYKit

YYKit 是一组庞大、功能丰富的 iOS 组件。 为了尽量复用代码,这个项目中的某些组件之间有比较强的依赖关系。为了方便其他开发者使用,我从中拆分出以下独立组件: YYModel — 高性能的 iOS ...

ibireme
2015/12/02
15.7K
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
8
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
4
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
171
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
昨天
2
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
昨天
2
0
开发技术瓶颈期,如何突破

前言 读书、学习的那些事情,以前我也陆续叨叨了不少,但总觉得 “学习方法” 就是一个永远在路上的话题。个人的能力、经验积累与习惯方法不尽相同,而且一篇文章甚至一本书都很难将学习方法...

_小迷糊
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部