Object-C自定义对象NSLog输入信息
http://blog.cnrainbird.com/index.php/2012/07/19/object-c_zi_ding_yi_dui_xiang_nslog_shu_ru_you_yong_xin_xi/
继续昨天的故事关于Object-C面向对象开发
自定义完对象以后,想查看对象的信息,于是我们直接NSLog:
结果输出的是一个内存地址,这肯定不是我们想要的。
之前的时候有被同事问到这种情况怎么能输出这个对象的所有信息,我还一本正经的说自已写个循环挨个输出呗,哎,基础不牢害死人。今天自已遇到这个问题了。google一下,很快找到了答案:在自定义的类里实现- (NSString *)description;这个方法就可以了。
- (NSString *)description{
return [NSString stringWithFormat:
@"{\n title = %@,\n subtitle = %@\n}",
self.title,self.subTitle];
}
运行后的输出
title = 邓峰:双向交流做好了,才能提高执行力,
subtitle = 时长: 00:02:35 点播: 4163日期: 2010-05-07 17:18:00
}
上面看着还不错,可是当我把这个类搁到一个数组里,然后输出数组的时候,还是乱了。
"{\n title = \U9093\U5cf0\Uff1a\U53cc\U5411\U4ea4\U6d41\U505a\U597d\U4e86\Uff0c\U624d\U80fd\U63d0\U9ad8\U6267\U884c\U529b,\n subtitle = \U65f6\U957f: 00:02:35 \U70b9\U64ad: 4163\U65e5\U671f: 2010-05-07 17:18:00\n}",
"{\n title = \U674e\U5f00\U590d\Uff1a\U79fb\U52a8\U4e92\U8054\U7f51\U5728\U519c\U6751\U7684\U53d1\U5c55,\n subtitle = \U65f6\U957f: 00:02:14 \U70b9\U64ad: 12064\U65e5\U671f: 2010-04-16 12:42:00\n}",
"{\n title = \U674e\U5f00\U590d\Uff1a\U79fb\U52a8\U4e92\U8054\U7f51\U5728\U519c\U6751\U7684\U53d1\U5c55,\n subtitle = \U65f6\U957f: 00:02:14 \U70b9\U64ad: 12064\U65e5\U671f: 2010-04-16 12:42:00\n}",
"{\n title = \U674e\U5f00\U590d\Uff1a\U79fb\U52a8\U4e92\U8054\U7f51\U5728\U519c\U6751\U7684\U53d1\U5c55,\n subtitle = \U65f6\U957f: 00:02:14 \U70b9\U64ad: 12064\U65e5\U671f: 2010-04-16 12:42:00\n}",
"{\n title = \U674e\U5f00\U590d\Uff1a\U79fb\U52a8\U4e92\U8054\U7f51\U5728\U519c\U6751\U7684\U53d1\U5c55,\n subtitle = \U65f6\U957f: 00:02:14 \U70b9\U64ad: 12064\U65e5\U671f: 2010-04-16 12:42:00\n}"
)
作为有洁癖的人(看到xcode有Warning就要解决掉),这种实在看着不爽,于是查资料找到一个解决办法:
It's kind of ugly to have to subclass NSArray, though, in terms of acquiring a lot of behaviors I don't want to mimic, and carrying extra unused data. Etc
#2: Another option is to convert the escaped string back to its original. This takes a 31-line procedure to handle the basics (\n, \t, \", and \). The up-side is that I don't need to subclass NSArray. The main downside is that this routine must be inserted in any NSLog call that could display my class. Another minor downside is that the escaped strings were wrappered with quote characters I can't eliminate, but that's hardly noticeable.
上面说,要么重新NSArray重新实现description,要么去掉这些特殊字符的转义。想想为了输全一个自已写的类要重新NSArray有点大题小作,而去掉这些特殊字符的转义也不是我想要的,因为我就是格式化出来,方便查看嘛,罢了,罢了,看来是无解,就此搁下。
参考资料:
NSLog – Making an NSObject return useful info
Overriding NSObject Description Method
Print Instances of NSObject’s Sub-class Friendly By Overriding NSObject Description Method
Auto Description Category for NSObject (any object)
NSDictionary `description` formatting problem — treats structure like char data
Object-C自定义对象NSLog输入信息的更多相关文章
- 利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能
原文:利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能 利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能1.在界面上添加几个checkbox和一 ...
- 5、前端--js常量、变量、5种基本数据类型(number string boolean undefined object)、运算符、流程控制、三元运算符、函数、自定义对象、内置对象、BOM操作
变量与常量 在JS中声明变量需要使用关键字 老版本 var(全部都是全局变量) 新版本 let(可以声明局部变量) # 推荐使用let(其实问题不大) 在JS中声明常量也需要使用关键字 const # ...
- JS自定义对象,正则表达式,JQuery中的一些知识点
一:自定义对象 1.基本概念:①对象:包含一系列无序属性和方法的集合.②键值对:对象中的数据是以键值对的形式存在的,以键取值.③属性:描述对象特征的一系列变量.[对象中的变量]④方法:描述对象行为的一 ...
- JS自定义对象以及相关成绩系统完整案例演示
[自定义对象] 1.基本概念 ①对象是拥有一系列无无序属性和方法的集合 ②键值对:对象中的数据,用以键值对的形式存在,对象的每个属性和方法,都对应一个键值,以键取值 ③属性:描述对象特征的一系列变量称 ...
- 第5章分布式系统模式 Data Transfer Object(数据传输对象)
正在设计一个分布式应用程序,为了满足单个客户端请求,您发现自己对一个远程接口发出了多个调用,而这些调用所增加的响应时间超出了可接受的程度. 影响因素 在与远程对象通信时,请考虑下列需要权衡的因素: 远 ...
- iOS开发——UI进阶篇(十一)应用沙盒,归档,解档,偏好设置,plist存储,NSData,自定义对象归档解档
1.iOS应用数据存储的常用方式XML属性列表(plist)归档Preference(偏好设置)NSKeyedArchiver归档(NSCoding)SQLite3 Core Data 2.应用沙盒每 ...
- JSON对象(自定义对象)
JSON对象(自定义对象) 1.什么是JSON对象 JSON对象是属性的无序集合,在内存中也表现为一段连续的内存地址(堆内存) 1)JSON对象是属性的集合 2)这个集合是没有任何顺序的 2.JSON ...
- JavaScript---网络编程(5)-自定义对象Json、Dom模型概念讲解
这节博客主要讲解Dom模型概念~和JSON的简单介绍 首先,还是先上out.js的代码: function println(param){ document.write(param+"< ...
- JavaScript---网络编程(4)-Date、Math、Global和自定义对象
本节博客进行Date对象.Math对象.Global对象和自定义对象的用法演示. 首先是一个out.js文件内容(输出到网页中的自定义输出方法): function println(parma){ d ...
随机推荐
- codecomb 2093【牛宫】
题目描述 Description Hzgd神牛准备给自己盖一座很华丽的宫殿.于是,他看中了一块N*M的矩形空地.空地中每个格子都有自己的海拔高度.胡张想让他的宫殿的平均海拔在海平面之上(假设海平面的高 ...
- swing的第一课
Swing介绍 Swing API 可扩展 GUI组件,以减轻开发者的生活创造基于JAVA前端/GUI应用.它是建立在AWT API之上,并作为 AWTAPI 的更换,因为它几乎每一个控制对应 AWT ...
- House Robber 解答
Question You are a professional robber planning to rob houses along a street. Each house has a certa ...
- 安装vs2015的时候出现的各种 1402错误
经搜索与尝试,确认为注册表权限问题,改过好几个子项,均提示不能修改设置子项的所有者什么的,后来一怒之下,直接把install节点下的compom项的权限的administratos权限删掉,删除的时候 ...
- 在线CRC校验
在线CRC校验: http://www.lammertbies.nl/comm/info/crc-calculation.html
- C的|、||、&、&&、异或、~、!运算(转)
位运算 位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果. 位运算符有: &(按位与).|(按位或) ...
- Clash of Clans(COC)资源压缩解密
Clash of Clans,简称为COC,中文名<部落冲突>,是ios平台上一款相当火爆的战斗策略类游戏,开发商是芬兰的supercell,据说日收入上百万美刀,创造了手游史上的一个神话 ...
- [KMP求最小循环节][HDU1358][Period]
题意 求所有循环次数大于1的前缀 的最大循环次数和前缀位置 解法 直接用KMP求最小循环节 当满足i%(i-next[i])&&next[i]!=0 前缀循环次数大于1 最小循环节是i ...
- android stagefright awesomeplayer 分析
主要调用awesomeplay.cpp的函数来实现音视频等功能,可以说是对awesomeplay.cpp的封装,进一步抽象,然后提供给上层调用,主要的调用者是MediaPlayerService.cp ...
- SQL Server 两种判断表名是否存在且删除的方式
邓老师(老邓)教的 if exists(select * from sysobjects where name='Table_88') drop table Table_88 偷的((*^__^ ...