iphone - 如何转储存储在 Objective-C 对象(NSArray 或 NSDictionary)中的数据

标签 iphone objective-c gdb dump

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

例如,在 PHP 中有 var_dump()print_r() 函数。 Perl 有 Data::Dumper CPAN 类等。

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

最佳答案

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

NSLog(@"%@", myObj);

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

NSString *stringRep = [myObj description];

你会得到(在第一种情况下登录到控制台),[myObj description] 的结果,NSObject 中定义的一个方法,用于打印 < em>描述(不是转储)对象。

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

NSArrayNSDictionaryNSData 这样的类会覆盖 description 以打印其内容的非常有用的递归描述,但默认的[NSObject description]只打印实例对应的指针值。

如果您控制相关类型的代码,则可以覆盖它们的 descriptiondebugDescription 方法以返回您想要的任何内容。如果没有,您可以使用类别覆盖 descriptiondebugDescription 方法,或使用类别来定义 myDebugDescription 或一些这样您可以然后使用 po [myObj myDebugDescription] 从 gdb 调用。

关于iphone - 如何转储存储在 Objective-C 对象(NSArray 或 NSDictionary)中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/289241/

相关文章:

iphone - UIImageView 上的放大镜

iphone - iPhone中的音频处理

ios - 解析 PFQuery 谓词指针对象

ios - iOS 中的倒数计时器在后台不工作

debugging - 如何检查GDB中函数的返回值?

检查 C/C++ 中动态加载的共享库中的变量类型

iphone - 如何知道iPhone中的服务器回复?

iphone - 通过 "number of items supported"授权 iPhone 软件

ios - 如何为开发设置推送通知?

linux - 将使用 "-g"编译的二进制文件与没有 "-g"的库链接