UIViewController的默认描述

时间:2012-09-26 14:45:36

标签: objective-c uiviewcontroller string-formatting

UIViewController的默认描述中的数值是多少?我曾经期望它是实例地址,或者也许是哈希,但是当我测试这个理论时,这就是我得到的:

NSLog(@"Self [%@]", self);
NSLog(@"Address [%p]", &self);
NSLog(@"Hash [%d]", [self hash]);

2012-09-26 10:28:00.202 QuickList7[85957:c07] Self [<SelectCategoryViewController: 0xa42fc60>]
2012-09-26 10:28:00.202 QuickList7[85957:c07] Address [0xbfffdea8]
2012-09-26 10:28:00.203 QuickList7[85957:c07] Hash [172162144]

我无法在UIViewController或超类的参考资料中找到解释 - 有谁知道?

2 个答案:

答案 0 :(得分:3)

这确实是实例地址,与使用description默认实现的任何其他NSOBject实现一样。

但是实例地址已经在self变量中,因为self的类型为UIViewController*并且已经是指针。 打印指针值&self,就像在示例中一样打印指针的地址(指针指针),而不是实例的地址,因为&self是确实属于UIViewController**类型。

如果您使用NSLog(@"%p", self)代替NSLog(@"%p", &self),则会看到与description使用的地址相同的地址,并显示为NSLog(@"%@", self)

答案 1 :(得分:1)

这是实例地址。在第二行中,您将打印指向实例的指针的地址(它位于堆栈中,这就是地址以0xbfff开头的原因)。不是实例指针本身。 NSLog(@"%p", self);将显示与使用self打印%@作为对象时显示的值相同的值。