我试图了解自动释放池。我创建了一个示例应用程序,如下所示:
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。 我错过了什么......有人可以帮我理解......
...谢谢
答案 0 :(得分:4)
retainCount永远不会达到0,因为当它为1且释放被调用时,它立即调用dealloc而不减少retainCount
答案 1 :(得分:0)
因为retainCount不会始终给出对象的精确保留计数。您不应该依赖retainCount
API进行内存管理。一旦你分配,保留一个对象,你必须释放该对象,它的保留计数将变为零。