美文网首页
iOS KVC (九) KVC模型转化(1) 模型打印 desc

iOS KVC (九) KVC模型转化(1) 模型打印 desc

作者: 奔跑吧小蚂蚁 | 来源:发表于2018-05-18 19:03 被阅读30次

iOS KVC(一)基本了解
iOS KVC (二) 不可不知的赋值深层次原理
iOS KVC (三)不可不知的取值深层次原理
iOS KVC (四)keyPath的深度解析
iOS KVC (五)KVC几种典型的异常处理
iOS KVC (六) KVC容器类及深层次原理
iOS KVC(七) KVC正确性的验证
iOS KVC (八) KVC几种常见应用
iOS KVC (九) KVC模型转化(1) 模型打印 description, debugDescription
iOS KVC (十)模型转换(2)模型转换

本章主要讲解两个方法,其中也用到一些runtime 的方法。runtime后续必不可少会讲。直接上代码。

直接上代码

1.Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property (nonatomic,strong)NSString *name;
@property (nonatomic,assign)int age;


@end
2.Person.m

#import "Person.h"
#import <objc/runtime.h>
@implementation Person

- (NSString *)description{
    NSMutableDictionary *dic = [NSMutableDictionary dictionary];
    //得到当前class的所有属性
    uint count;
    objc_property_t *properties = class_copyPropertyList([self class], &count);
    for (int i = 0; i<count; i++) {
        objc_property_t property = properties[I];
        NSString *name = @(property_getName(property));
        id value = [self valueForKey:name]?:[NSNull null];//此处注意不能为nil 字典中尽量不要出现nil
        [dic setObject:value forKey:name];
    }
    free(properties);
    return [NSString stringWithFormat:@"description:<%@:%p> -- %@",[self class],self,dic];
}

- (NSString *)debugDescription{
    NSMutableDictionary *dic = [NSMutableDictionary dictionary];
    //得到当前class的所有属性
    uint count;
    objc_property_t *properties = class_copyPropertyList([self class], &count);
    for (int i = 0; i<count; i++) {
        objc_property_t property = properties[I];
        NSString *name = @(property_getName(property));
        id value = [self valueForKey:name]?:[NSNull null];//此处注意不能为nil 字典中尽量不要出现nil
        [dic setObject:value forKey:name];
    }
    free(properties);
    return [NSString stringWithFormat:@"debugDescription:<%@:%p> -- %@",[self class],self,dic];
}

@end
3.ViewController.m
#import "ViewController.h"
#import "Person.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    Person *p = [[Person alloc]init];
    p.name = @"小明";
    p.age = 10;
    NSLog(@"p:%@",p);
}

打印数据:

2018-05-18 17:54:09.925353+0700 KVC[44115:1324816] p:description:<Person:0x604000031fe0> -- {
    age = 10;
    name = "\U5c0f\U660e";
}

总结:当我们对p进行打印时会直接触发“description”方法,那么“debugDescription”在什么时间调用,请看下图


断点打印.png

总结:
由上图我们可以看到,当对p进行打印的时候,直接触发调用了“description”,而我们对p进行控制台打印的时候 会触发“debugDescription”函数,已经很明白了 ,不需要进行解释了。

精彩在后面~

相关文章

  • iOS KVC (九) KVC模型转化(1) 模型打印 desc

    iOS KVC(一)基本了解iOS KVC (二) 不可不知的赋值深层次原理iOS KVC (三)不可不知的取值...

  • 14-Swift中字典转模型

    字典转模型(初始化时传入字典) 字典转模型(利用KVC转化) 一、 普通的字典转模型: 二、利用KVC字典转模型:

  • KVC的简单使用

    KVC字典转模型 KVC 中经常使用的就是字典转模型 KVC的大招 KVC设置对象属性及取值 KVC间接设置对象属...

  • 自己动手写个MJExtension或者Mantle

    iOS里面的模型映射的核心就是KVC。Let's start。 1。起源:你的App肯定有许多模型对象,但是如果都...

  • runtime -- 实现字典转模型

    runtime与KVC字典转模型的区别:1.KVC:遍历字典中所有的key,去模型中查找有没有对应的属性名。2.r...

  • KVC

    KVC代表什么 k - keyv - valuec - coding KVC能做什么 1.字典转模型2.通过set...

  • iOS 字典转模型KVC实现

    字典转模型 KVC 实现 KVC 字典转模型弊端:必须保证,模型中的属性和字典中的key一一对应。 如果不一致,就...

  • KVC和KVO面试题

    kvc kvc是什么:键值编码 kvc的使用场景:1.字典转模型2.当我们想替换系统的属性时候,比如系统的tabb...

  • 自动生成属性的模型

    利用 KVC 实现的自动生成属性的模型 调用下面的方法 在输出控制台输出属性模型, 利用kvc 属性名字与字典的 ...

  • runtime简单使用

    将字典转化为模型,面向模型开发,是在开发中最为常用的功能。利用KVC可以将字典转换为模型,但是前提有三个约束,一个...

网友评论

      本文标题:iOS KVC (九) KVC模型转化(1) 模型打印 desc

      本文链接:https://www.haomeiwen.com/subject/egfgdftx.html