在[obj release]之后,引用计数仍然是1,它应该被解除分配

当我创建一个对象并检查其保留计数时,我按预期得到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]);
如果我先将
str
设置为
nil
,我确实会看到保留计数为0。这是为什么?     
已邀请:
不要使用
retainCount
,它在大多数情况下都没有达到预期效果。 你的第二个
NSLog
正在访问作为对象的解除分配的内存。在这种特殊情况下,释放的内存仍然包含足够的NSString中的旧数据,该数据刚刚被释放,以便在调用
retainCount
方法时程序不会崩溃。如果你用
NSZombieEnabled
运行它,你会得到一条关于向解除分配的实例发送消息的错误消息。 调用nil时返回0的原因是返回整数的方法在nil对象上调用时总是返回0。     
不要依赖
retainCount
。而且不在乎这个。引擎盖下可能会发生很多事情。您只需要确保已经释放了所有拥有的东西。如果您要确保没有泄漏任何内存,请使用Instrument,而不是在NSLog中使用retainCount。     

要回复问题请先登录注册