iOS模型输出和打印
在调试时,我们经常用到输出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模型输出和打印的更多相关文章
- iOS中忽略NSLog打印信息(通过PCH文件中定义DEBUG宏解决)
iOS中忽略NSLog打印信息 解决办法: 1.新建PrefixHeader_pch文件,在该文件中定义一下宏 //通过DEBUG宏的定义来解决Debug状态下和Release状态下的输出 #ifde ...
- Assimp场景模型输出Collada,STL,3DPDF
本文介绍开源库模型的几种输出格式:DAE,STL,3DPDF. Assimp是C++写的,AssimpNet是C#重构其中主要数据结构,并开通Assimp中重要方法的调用接口,为不熟悉C++的码农带来 ...
- 又一个高性能轻量级的iOS模型框架YYModel
前言 iOS的模型框架其实有很多了,去年研究过Mantle,也了解过JSONModel.MJExtension,最近的项目项目优化的时候,再次考虑,基于轻量级.高性能的考虑,最终选择了YYModel. ...
- ZeroMQ接口函数之 :zmq_z85_encode – 使用Z85算法对一个二进制秘钥进行加密,输出可打印的文本
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq-z85-encode zmq_z85_encode(3) ØMQ Manual - ØMQ/4. ...
- IOS: 模型面数控制
你可以先试试 生成之后在虚拟机上运行一下就知道了 不过关键也看手机的好坏 場景 人物 面數的話越少越好(但要保持模型的完整) 貼圖解析度也不要太大 資料越少越好 //================ ...
- iOS 格式化输出符号与类型转换
1.iOS 格式化输出符号 %@ 对象 %d, %i 整数 %u 无符号整形 %f 浮点(双字节) %x, %X 二进制整数 %o 八进制整数 %zi ...
- 【转】JAVA输出内容打印到TXT以及不同系统中如何换行
JAVA输出内容打印到TXT以及不同系统中如何换行 http://xiyang.09.blog.163.com/blog/static/59827615201172552755293/ 2011-08 ...
- 1.java小作业-计算1到100的整合-指定输入多少行输出就打印多少行-打印24小时60分钟每一分钟-重载基础练习-面向java编程初学者
可能有和我一样刚开始学习java的小伙伴们, 可以或多或少了解一点别的语言知识,我就是中途转过来的, 明白一点,关键不在语言本身····· 所以面对初学者来说,基础要学好, 下面列举几个没什么难度的小 ...
- Python中输入和输出(打印)数据
一个程序要进行交互,就需要进行输入,进行输入→处理→输出的过程.所以就需要用到输入和输出功能.同样的,在Python中,怎么实现输入和输出? Python3中的输入方式: Python提供了 inpu ...
随机推荐
- HDU 5876 补图最短路
开两个集合,一个存储当前顶点可以到达的点,另一个存储当前顶点不能到达的点.如果可以到达,那肯定由该顶点到达是最短的,如果不能,那就留着下一次再判. #include<bits/stdc++.h& ...
- HTML5——3 HTML5拖放
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [转载]pytest学习笔记
pytest学习笔记(三) 接着上一篇的内容,这里主要讲下参数化,pytest很好的支持了测试函数中变量的参数化 一.pytest的参数化 1.通过命令行来实现参数化 文档中给了一个简单的例子, ...
- [AHOI2007]密码箱 (数学 + 暴力)
链接:https://ac.nowcoder.com/acm/problem/19877来源:牛客网 题目描述 在一次偶然的情况下,小可可得到了一个密码箱,听说里面藏着一份古代流传下来的藏宝图,只要能 ...
- STMStudio-stm32软件的应用笔记
上次编写中,已经提到该软件的功能了,可以增加调试手段. 编译出axf文件-keil和out文件-iar,注意keil在output文件名是,不能有"."既NL_ZKTP3_V1.0 ...
- BZOJ 3217: ALOEXT (块状链表套trie)
第一次写块状链表,发现还挺好写的,但是一点地方写错加上强制在线就会各种姿势WA/TLE/RE爆- 想法就是分块后,在每一个块上维护最大值和次大值,还在每一个块上维护一棵trie树来求异或最大值.散块直 ...
- [Spring Boot] Set Context path for application in application.properties
If you were using Microservice with Spring Boot to build different REST API endpoints, context path ...
- MSMQ介绍
最近的项目中用到了MSMQ,简单的使用到了它,现总结下.有些是网上的资料有些是自己的笔记. MSMQ理解 Message Queue(微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式 ...
- [Luogu] 逛公园
https://www.luogu.org/problemnew/show/P3953 https://www.zybuluo.com/wsndy-xx/note/1134388 #include&l ...
- 【原创】洛谷 LUOGU P3373 【模板】线段树2
P3373 [模板]线段树 2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格式: 第 ...