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或超类的参考资料中找到解释 - 有谁知道?
答案 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
打印%@
作为对象时显示的值相同的值。