IOS description与debugDescription在调试程序中的应用

IOS 中打印函数description与debugDescription的应用

一、description和debugDescription是什么

        description和debugDescription是NSObject协议中的声明的两个方法,同时NSObject类也实现了这个方法,如果子类没有重写,则会调用父类的description和debugDescription方法。首先,这两个方法适用于程序代码的调试的,当我们调用打印Log时,会向对象发送一个这样的消息。

我们先来看声明部分的代码:

?


1

2

+ (NSString *)description;

+ (NSString *)debugDescription;

这里返回的字符串就是我们打印在控制台显示的信息。

二、NSObject基类中的description方法是如何实现的

我们写如下的测试代码:

?


1

2

 NSObject * objc = [[NSObject alloc]init];

 NSLog(@"objc:%@",objc);

控制台输出的信息如下:

可以看到,方法的实现大致是这样的:

?


1

2

3

-(NSString *)description{

    return [NSString stringWithFormat:@"<%@:%p>",[self class],&self];

}

三、重写description方法

通过上面的介绍,我们大致知道description方法的原理了,在程序调试时,我们可以充分利用这个方法带来的便利,大大缩减我们调试程序所需要的时间。例如:创建一个Test类,给它定义两个属性如下:

Text.h

?


1

2

3

4

5

#import <Foundation/Foundation.h>

@interface TestObject : NSObject

@property(nonatomic,strong)NSString  * name;

@property(nonatomic,strong)NSString  * age;

@end

我们在.m文件中将description方法重写:

?


1

2

3

4

5

6

#import "TestObject.h"

@implementation TestObject

-(NSString *)description{

    return [NSString stringWithFormat:@"%@",@{@"name":_name,@"age":_age}];

}

@end

重写的方法将Test类对象的属性打印了出来,这时我们在调用NSLog函数时,打印结果如下:

是不是很炫酷,如此一来,我们可以将我们基本不会用到的类名和地址转换成打印数据,极大的方便了我们代码的调试工作。

四、description与debugDescription的区别

这两个方法的区别仅仅在于调试的位置不同,调用不同的函数。description是我们在程序中打Log会调用的方法,debugDescription则是我们在断点调试时,在控制台使用po命令打印会调用的方法,比如我们重写Test类的这个方法:

?


1

2

3

-(NSString *)debugDescription{

    return [NSString stringWithFormat:@"<%@:%p>:%@",[self class],&self,@{@"name":_name,@"age":_age}];

}

然后我们在程序中加个断点运行,在程序断掉之后,我们在调试区输入:po text,回车之后,会出现如下的信息:

时间: 2024-09-20 16:08:01

IOS description与debugDescription在调试程序中的应用的相关文章

[译] iOS 响应式编程:Swift 中的轻量级状态容器

本文讲的是[译] iOS 响应式编程:Swift 中的轻量级状态容器, 原文地址:Reactive iOS Programming: Lightweight State Containers in Swift 原文作者:Tyler Tillage 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:deepmissea 校对者:FlyOceanFish iOS 响应式编程:Swift 中的轻量级状态容器 事物的状态 在客户端架构如何工作上,每一个 iOS

ios支付宝支付集成到项目中x86_64的错误

问题描述 ios支付宝支付集成到项目中x86_64的错误 解决方案 http://blog.csdn.net/m372897500/article/details/45790689

iOS原生如何加载HTML中img标签的图片

原文出自:iOS原生如何加载HTML中img标签的图片 前言 最近iOS App项目中使用Webview加载H5页面比较多,也有不少朋友经常问到这个问题,在这里我也学习学习如何通过iOS原生的方式来加载H5页面中的图片然后让webview显示图片. 相信有很多朋友也遇到过这样的问题,可是很多朋友都没有思路,不知如何入手.今天,刚好学习了一下,并写了一个简单的demo.下面让我们一起来学习一下吧! 本篇文章适合哪些人群阅读? 项目中有类似需求的,而又没有思路的 曾经做过类似需求的,可以参考两者的思

Cocos2d-x与ios内存管理分析(在游戏中减少内存压力)

  Cocos2d-x与ios内存管理分析(在游戏中减少内存压力) 猴子原创,欢迎转载.转载请注明: 转载自Cocos2D开发网--Cocos2Dev.com,谢谢!  原文地址: http://www.cocos2dev.com/?p=281 注:自己以前也写过Cocos2d-x如何优化内存的使用,以及内存不足的情况下怎么处理游戏.今天在微博中看到有朋友介绍了下内存,挺详细的.不知道是谁写的,我记录下. 一,iOS与图片内存 在iOS上,图片会被自动缩放到2的N次方大小.比如一张1024*10

苹果在iOS 8版的Safari浏览器中推出一项新功能

摘要: 很多时候大家网购都需要录入自己的信用卡信息,长长的数字在移动设备上录入是件麻烦事.因此,苹果在iOS 8版的Safari浏览器中推出了一项新功能来,该功能可让用户利用设备的摄像 很多时候大家网购都需要录入自己的信用卡信息,长长的数字在移动设备上录入是件麻烦事.因此,苹果在iOS 8版的Safari浏览器中推出了一项新功能来,该功能可让用户利用设备的摄像头来扫描信用卡,然后自动识别其中的数字并录入相应信息,从而避免了人工录入的麻烦. 此前苹果也提供了其他形式的便利录入手段,比方说用户可以在

iOS开发之获取系统相册中的图片与视频教程(内带url转换)_IOS

好些天没写点东西了,最近公司要做新项目,有点小忙.不想我的坚持就此中断,我把我前些天研究的东西拿出来给大家看看. 这次整理的是AssetsLibrary和PhotoKit的使用.本人处女座,有点强迫症,之前写的项目里用的是AssetsLibrary写的调取相册内的媒体文件,但是Xcode总是报警告错误,虽然能够编译并展示效果,但是十几个警告错误挂在那,心里总不是滋味,所以我就研究了一下AssetLibrary和PhotoKit. 在 iOS 8 出现之前,开发者只能使用 AssetsLibrar

iOS环信SDK 导入Demo中3rdparty里面的VoiceConvert这个库,会报Undefined symbols for architecture i386

问题描述 iOS环信SDK 想集成Demo中已经写好的UI,导入Demo中3rdparty里面的VoiceConvert这个库,会报Undefined symbols for architecture i386,删掉就能正常运行. 解决方案 你对照demo看下,是不是少库.

水果忍者开发商iOS端全部游戏应用限免中

威锋网讯,如果你是<水果忍者>的粉丝,那么你一定知道其背后的开发商HalfbrickStudios.目前,所有来自HalfbrickStudios的iOS游戏正在限免中.目前不清楚限免的活动什么时候会结束,如果你喜欢这个公司出产的游戏,不妨抓紧时间到AppStore下载.本次限免的游戏主要包括:FruitNinja,HDforiPadFruitNinja:PussinBoots,HDforiPadBandStarsFishOutofWaterAgeofZombiesMonsterDash通常来

苹果彻底堕落了!iOS 8.1.1持续惹祸中

不可否认的是,如今的苹果已经失去了当年精益求精的态度,几乎每一次发布新设备,几乎每一次系统更新,不管大版本还是小版本,都会出现各种各样的问题,修复之后又会冒出新问题,令人抓狂.iOS 8.1.1也不例外.它闪电封堵了越狱漏洞,但随后让很多用户郁闷不已,比如Wi-Fi无法连接.iPad mini 2发热严重.Safari无法复制粘贴--你以为这就完了?一位昵称metaweb的用户在苹果官方论坛中反馈称,iPad 3升级了iOS 8.1.1,就陷入了不停死机.随机重启的尴尬境地, 多点触摸也不管用了