1

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 或其超类的参考资料中找到解释——有人知道吗?

4

2 回答 2

3

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

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

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

于 2012-09-26T14:53:16.380 回答
1

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

于 2012-09-26T14:52:38.813 回答