当前位置:  开发笔记 > 编程语言 > 正文

如何转储存储在objective-c对象中的数据(NSArray或NSDictionary)

如何解决《如何转储存储在objective-c对象中的数据(NSArray或NSDictionary)》经验,为你挑选了3个好方法。

请原谅我这里可能有些愚蠢的问题,但在其他编程语言(PHP或Perl等脚本编写语言)中,通常很容易转储变量中包含的所有内容.

例如,在PHP中有var_dump()print_r()函数.Perl有Data::DumperCPAN类等.

Objective-C有这样的东西吗?在少数情况下,能够转储所有内容非常方便,而不是使用gdb来检查每个变量.



1> Barry Wark..:

在Cocoa中,没有像PHP的print_r或python的repr那样的"转储",因为没有像这些语言那样"表示"对象的文本格式.如果你使用

NSLog(@"%@", myObj);

要么

NSString *stringRep = [NSString stringWithFormat:@"%@",myObj];

要么

NSString *stringRep = [myObj description];

你会得到(在第一种情况下记录到控制台),结果是为了打印对象的描述(而不是转储)而[myObj description]定义的方法.NSObject

如果你po myObj在gdb中调用,你会得到[myObj debugDescription](通常是相同的description,但并非总是如此).

像类NSArrayNSDictionaryNSData覆盖的类description打印一个非常有用的内容递归描述,但默认[NSObject description]只打印对应于实例的指针值.

如果您控制相关类型的代码,则可以覆盖它们descriptiondebugDescription方法以返回所需的任何内容.如果没有,您可以使用类别覆盖descriptionor debugDescription方法,或使用类别来定义一个myDebugDescription或多个类别,然后您可以使用gdb调用po [myObj myDebugDescription].



2> Ben Gottlieb..:

您还可以使用gdb print object命令在调试器中快速查看对象:

po dictionary

这与在代码中调用NSLog(...)基本相同.

打印出包含ASCII数据的NSData时也很有用:

p (char *) [data bytes]



3> Jason Coco..:

使用NSLog()转储对象的内容.例如:

NSData* myData = //... assume this exists
NSLog(@"Contents of myData: %@", myData);

NSLog有一个printf样式的格式字符串(需要一个NSString对象),后跟一个变量参数列表,就像printf一样.替换字符%@表示对象的描述方法的对象.这对于在Cocoa中转储大多数Objective-C对象很有用.

如果你想使用gdb转储对象的内容(我看到你用gdb标记了这个),使用特殊的"po"指令而不是print.例如:

gdb) po myData

将导致gdb转储myData对象.po是print-object的快捷方式.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有