请原谅我在这里提出一个可能很愚蠢的问题,但在其他编程语言(如 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
相同,但并非总是如此)。
像 NSArray
和 NSDictionary
和 NSData
这样的类会覆盖 description
以打印其内容的非常有用的递归描述,但默认的[NSObject description]
只打印实例对应的指针值。
如果您控制相关类型的代码,则可以覆盖它们的 description
或 debugDescription
方法以返回您想要的任何内容。如果没有,您可以使用类别覆盖 description
或 debugDescription
方法,或使用类别来定义 myDebugDescription
或一些这样您可以然后使用 po [myObj myDebugDescription]
从 gdb 调用。
关于iphone - 如何转储存储在 Objective-C 对象(NSArray 或 NSDictionary)中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/289241/