在调试时,我们经常用到输出model,查看数据是否正确,还会在控制台"po 模型"操作,一般输出都是这样的格式的:

person is <Person: 0x608000034300>

这里添加一种解决方法:

1> 解决NSLog(@"person is %@", p)打印model内容:

//
// Person.m
// Demo1
//
// Created by 思 彭 on 2017/7/31.
// Copyright © 2017年 思 彭. All rights reserved.
// #import "Person.h"
#import <objc/runtime.h> @implementation Person // 通过重写模型的description方法,实现打印Model - (NSString *)description { // 初始化一个字典
NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
// 得到当前classs的所有属性
uint count;
objc_property_t *properties = class_copyPropertyList([self class], &count);
for (int i = ; i < count; i++) {
// 循环并用kvc得到每个属性的值
objc_property_t property = properties[i];
NSString *name = @(property_getName(property));
id value = [self valueForKey:name] ? : nil; // 默认值为nil字符串
[dictionary setObject:value forKey:name];
}
// 释放
free(properties);
// return
return [NSString stringWithFormat:@"<%@: %p> -- %@",[self class], self, dictionary];
}
@end

2>po model输出model内容:

//
// NSObject+DebugDescription.m
// Demo1
//
// Created by 思 彭 on 2017/7/31.
// Copyright © 2017年 思 彭. All rights reserved.
// #import "NSObject+DebugDescription.h"
#import <objc/runtime.h> @implementation NSObject (DebugDescription) - (NSString *)debugDescription {
if ([self isKindOfClass:[NSArray class]] || [self isKindOfClass:[NSNumber class]] || [self isKindOfClass:[NSString class]]) {
return self.debugDescription;
}
// 初始化一个字典
NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
// 得到当前classs的所有属性
uint count;
objc_property_t *properties = class_copyPropertyList([self class], &count);
for (int i = ; i < count; i++) {
// 循环并用kvc得到每个属性的值
objc_property_t property = properties[i];
NSString *name = @(property_getName(property));
id value = [self valueForKey:name] ? : nil; // 默认值为nil字符串
[dictionary setObject:value forKey:name];
}
// 释放
free(properties);
// return
return [NSString stringWithFormat:@"<%@: %p> -- %@",[self class], self, dictionary];
} @end

使用:

//
// ViewController.m
// Demo1
//
// Created by 思 彭 on 2017/7/31.
// Copyright © 2017年 思 彭. All rights reserved.
// #import "ViewController.h"
#import "Person.h"
#import "NSObject+DebugDescription.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. Person *p = [Person new];
p.name = @"sis";
p.age = ;
p.habit = @"singer, dancer";
NSLog(@"person is %@", p); // person is <Person: 0x608000034300>
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end

注意:

在使用控制器类需要导入该Category哟!!!

iOS模型输出和打印的更多相关文章

  1. iOS中忽略NSLog打印信息(通过PCH文件中定义DEBUG宏解决)

    iOS中忽略NSLog打印信息 解决办法: 1.新建PrefixHeader_pch文件,在该文件中定义一下宏 //通过DEBUG宏的定义来解决Debug状态下和Release状态下的输出 #ifde ...

  2. Assimp场景模型输出Collada,STL,3DPDF

    本文介绍开源库模型的几种输出格式:DAE,STL,3DPDF. Assimp是C++写的,AssimpNet是C#重构其中主要数据结构,并开通Assimp中重要方法的调用接口,为不熟悉C++的码农带来 ...

  3. 又一个高性能轻量级的iOS模型框架YYModel

    前言 iOS的模型框架其实有很多了,去年研究过Mantle,也了解过JSONModel.MJExtension,最近的项目项目优化的时候,再次考虑,基于轻量级.高性能的考虑,最终选择了YYModel. ...

  4. ZeroMQ接口函数之 :zmq_z85_encode – 使用Z85算法对一个二进制秘钥进行加密,输出可打印的文本

    ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq-z85-encode zmq_z85_encode(3)          ØMQ Manual - ØMQ/4. ...

  5. IOS: 模型面数控制

    你可以先试试 生成之后在虚拟机上运行一下就知道了 不过关键也看手机的好坏 場景 人物 面數的話越少越好(但要保持模型的完整)  貼圖解析度也不要太大 資料越少越好 //================ ...

  6. iOS 格式化输出符号与类型转换

    1.iOS 格式化输出符号 %@    对象 %d,   %i 整数 %u     无符号整形 %f      浮点(双字节) %x,   %X  二进制整数 %o     八进制整数 %zi     ...

  7. 【转】JAVA输出内容打印到TXT以及不同系统中如何换行

    JAVA输出内容打印到TXT以及不同系统中如何换行 http://xiyang.09.blog.163.com/blog/static/59827615201172552755293/ 2011-08 ...

  8. 1.java小作业-计算1到100的整合-指定输入多少行输出就打印多少行-打印24小时60分钟每一分钟-重载基础练习-面向java编程初学者

    可能有和我一样刚开始学习java的小伙伴们, 可以或多或少了解一点别的语言知识,我就是中途转过来的, 明白一点,关键不在语言本身····· 所以面对初学者来说,基础要学好, 下面列举几个没什么难度的小 ...

  9. Python中输入和输出(打印)数据

    一个程序要进行交互,就需要进行输入,进行输入→处理→输出的过程.所以就需要用到输入和输出功能.同样的,在Python中,怎么实现输入和输出? Python3中的输入方式: Python提供了 inpu ...

随机推荐

  1. BZOJ 4823 老C的方块

    把格子分成四类 第一类是蓝线左右的相邻两个格子 第二类为与蓝线左边格子相邻的点 第三类为与蓝线右边格子相邻的点 建边就S朝第二类每个点建边 第二类每个点朝其相邻的第一类建边 第一类从左格子朝右格子建边 ...

  2. stat /var/lib/docker/tmp/docker-builder234542842/usr/local/resource/noah_init.sql

    参考:https://blog.csdn.net/andrew_wf/article/details/85202511 将noah_init.sql放到与Dockerfile同一目录

  3. 定时备份etc目录

    #!/bin/bash # #******************************************************************** #encoding -*-utf ...

  4. python3 scrapy爬虫项目的诞生

    前提安装好scrapy模块最好 requests和bs4模块都安装好 可以概括为五个步骤 步骤一:新建一个项目 无论你用windows也好,linux也罢,在cmd或者终端 切换到目标文件夹,然后输入 ...

  5. 09 saltstack生产实例--Haproxy+keepalived

    1.如何理解haproxy+keepalived https://www.cnblogs.com/zs-wei/p/9213961.html HaProxy可以通过监听一个统一的端口对外提供能力,然后 ...

  6. linux 下python进程查看及关闭

    查看进程 ps -ef |grep python 关闭进程 kill -9 26879 其中26879为进程号. linux下后台执行某个python脚本 nohup python -u xxx.py ...

  7. SSM框架初始配置

    1 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="h ...

  8. 《30天自制操作系统》学习笔记--番外篇之Mac环境下的工具介绍

    这几天又有点不务正业了,书也没看,一直在搞这个破环境,尝试各种做法,网上各种垃圾信息,浪费了很多时间,说的基本都是废话,不过还是找到了一些,赶紧写下来,不然这个过几天又忘了 首先是环境,我用的是Max ...

  9. Linux之动态库

    命令规则 lib + 名字 + .so 制作步骤 1)生成与位置无关的代码(生成与位置无关的代码) 2)将.o打包成共享库(动态库) 发布和使用共享库 动态库运行原理: 生成动态库: gcc -fPI ...

  10. nginx变量与实列

    nginx内置变量 内置变量存放在  ngx_http_core_module 模块中,变量的命名方式和apache 服务器变量是一致的.总而言之,这些变量代表着客户端请求头的内容,例如$http_u ...