在调试时,我们经常用到输出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. P2172 [国家集训队]部落战争 二分图最小不相交路径覆盖

    二分图最小不相交路径覆盖 #include<bits/stdc++.h> using namespace std; ; ; ; ], nxt[MAXM << ], f[MAXM ...

  2. DX12 开debuggerlayer

    https://social.technet.microsoft.com/Forums/azure/en-US/ef10f8eb-fee0-4cde-bb01-52d1db2ea347/win10-1 ...

  3. esxi克隆虚拟机

    1.->选中虚拟机->导出(需要关闭虚拟机电源) 此时会下载下两个文件: 2.新建虚拟机 ->从OVF或OVA文件部署虚拟机 然后创建虚拟机,选择第二项 然后填入新虚拟机名称,并把下 ...

  4. BZOJ 2244: [SDOI2011]拦截导弹 (CDQ分治 三维偏序 DP)

    题意 略- 分析 就是求最长不上升子序列,坐标取一下反就是求最长不下降子序列,比较大小是二维(h,v)(h,v)(h,v)的比较.我们不看概率,先看第一问怎么求最长不降子序列.设f[i]f[i]f[i ...

  5. Luogu P4398 [JSOI2008]Blue Mary的战役地图 矩阵哈希

    其实可以二分矩阵边长但是我太懒了$qwq$. 把每个子矩阵扔到$map$里,然后就没了 #include<cstdio> #include<map> #include<i ...

  6. js上传文件夹

    用过浏览器的开发人员都对大文件上传与下载比较困扰,之前遇到了一个php文件夹上传下载的问题,无奈之下自己开发了一套文件上传控件,在这里分享一下.希望能对你有所帮助.此控件PC全平台支持包括mac,li ...

  7. HGOI20191115 模拟赛 题解

    Problem A 表演 有$n$个有点权的点,$m$个有边权的边.对于每个点$u$,输出从这个点出发到$v$,其路径权值的两倍加上v的点权和最小的值. 对于$100\%$的数据,满足$1 \leq ...

  8. C#中如何去掉字"/0"

    string str = "you/0are/0sweet/0"; str = str.replace("/0","")); 备忘一下

  9. js动态往对象里边添加一项

    第一种方法let obj ={"name":"tom","age":16}let key = "id";let valu ...

  10. 【软件工程】Beta冲刺(1/5)

    链接部分 队名:女生都队 组长博客: 博客链接 作业博客:博客链接 小组内容 恩泽(组长) 过去两天完成了哪些任务 描述 tomcat的学习与实现 服务器后端部署,API接口的beta版实现 后端代码 ...