当我创建一个对象并检查其保留计数时,我得到了预期的 1。当我释放对象,然后再次检查保留计数时,它仍然是1。难道不应该释放该对象,并且保留计数为0吗?
NSMutableString *str=[[NSMutableString alloc] initWithString:@"hello"];
NSLog(@"reference count is %i",[str retainCount]);
[str release];
NSLog(@"reference count is %i",[str retainCount]);
I do如果我设置,则保留计数为 0str
to nil
第一的。这是为什么?
不要使用retainCount
,在大多数情况下它不会达到您的预期。
你的第二个NSLog
正在将已释放的内存作为对象进行访问。在这种特殊情况下,释放的内存仍然包含来自 NSString 的足够旧数据,这些数据刚刚被释放,以便程序在retainCount
方法被调用。如果你运行这个NSZombieEnabled
您可能会收到一条有关向已解除分配的实例发送消息的错误消息。
调用 nil 时返回 0 的原因是,在 nil 对象上调用时返回整数的方法将始终返回 0。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)