【问题标题】:After Autorelease pool is drained, retain count of autorelease variable is still 1. Shouldn't be zero [duplicate]自动释放池耗尽后,自动释放变量的保留计数仍为 1。不应为零 [重复]
【发布时间】:2012-08-08 10:43:10
【问题描述】:

可能重复:
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。 我错过了什么吗...有人可以帮我理解吗...。

谢谢...

【问题讨论】:

标签: iphone ios ipad


【解决方案1】:

retainCount 永远不会达到 0,因为当它为 1 并调用 release 时,它​​会立即调用 dealloc 而不会递减 retainCount

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-08-11
      • 1970-01-01
      • 2011-06-24
      • 2011-07-06
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多