首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何转储存储在objective-c对象(NSArray或NSDictionary)中的数据

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

Stack Overflow用户
提问于 2008-11-14 04:24:30
回答 5查看 65.8K关注 0票数 48

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

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

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-11-14 04:57:21

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

代码语言:javascript
运行
复制
NSLog(@"%@", myObj);

代码语言:javascript
运行
复制
NSString *stringRep = [NSString stringWithFormat:@"%@",myObj];

代码语言:javascript
运行
复制
NSString *stringRep = [myObj description];

您将得到(在第一种情况下记录到控制台) [myObj description]的结果,这是一个在NSObject中定义的方法,用于打印对象的描述(not a dump)。

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

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

如果您控制有问题的类型的代码,则可以覆盖它们的descriptiondebugDescription方法以返回所需的任何内容。如果没有,您可以使用category覆盖descriptiondebugDescription方法,或者使用category定义一个myDebugDescription或类似的东西,然后可以使用po [myObj myDebugDescription]从gdb调用。

票数 74
EN

Stack Overflow用户

发布于 2008-11-14 05:08:34

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

代码语言:javascript
运行
复制
po dictionary

这基本上等同于调用NSLog(...)在你的代码中。

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

代码语言:javascript
运行
复制
p (char *) [data bytes]
票数 17
EN

Stack Overflow用户

发布于 2008-11-14 04:29:19

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

代码语言:javascript
运行
复制
NSData* myData = //... assume this exists
NSLog(@"Contents of myData: %@", myData);

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

如果您希望使用gdb转储对象的内容(我看到您用gdb标记了此内容),请使用特殊的"po“指令而不是print。例如:

代码语言:javascript
运行
复制
gdb) po myData

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

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/289241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档