排出自动释放池后,保留自动释放变量的计数仍为1.不应为零

时间:2012-08-11 09:04:38

标签: iphone ios ipad

  

可能重复:
  When to use -retainCount?

我试图了解自动释放池。我创建了一个示例应用程序,如下所示:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

NSString *releasePoolString = [[[NSString alloc] initWithFormat:@"%@",@"ReleasePool autorelease variable"] autorelease];

NSLog(@"Retain count of autorelease variable inside release pool %i",[releasePoolString retainCount]);

[pool drain];

// After pool drain still retain count = 1 ??????
NSLog(@"Retain count of autorelease variable after release pool drain %i",[releasePoolString retainCount]);

最后一个日志仍然将retaincount打印为1。 我错过了什么......有人可以帮我理解......

...谢谢

2 个答案:

答案 0 :(得分:4)

retainCount永远不会达到0,因为当它为1且释放被调用时,它立即调用dealloc而不减少retainCount

答案 1 :(得分:0)

因为retainCount不会始终给出对象的精确保留计数。您不应该依赖retainCount API进行内存管理。一旦你分配,保留一个对象,你必须释放该对象,它的保留计数将变为零。