Iphone 排空自动释放池后,自动释放变量的保留计数仍为1。不应该';不可能是零
可能重复:Iphone 排空自动释放池后,自动释放变量的保留计数仍为1。不应该';不可能是零,iphone,ios,ipad,Iphone,Ios,Ipad,可能重复: 我试图理解自动释放池。我创建了一个示例应用程序,如下所示: NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSString *releasePoolString = [[[NSString alloc] initWithFormat:@"%@",@"ReleasePool autorelease variable"] autorelease]; NSLog(@"Retain count of autore
我试图理解自动释放池。我创建了一个示例应用程序,如下所示:
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。
我是不是错过了什么。。。谁能帮我理解一下
谢谢…,因为retainCount不会始终给出对象的精确retain计数。内存管理不应依赖于
retainCount
API。一旦您分配、保留一个对象,您必须释放该对象,其保留计数将变为零。因为重新计数不会始终给出对象的准确保留计数。内存管理不应依赖于retainCount
API。一旦您分配、保留一个对象,您必须释放该对象,其保留计数将变为零。retainCount永远不会达到0,因为当它为1并调用release时,它会立即调用dealloc而不递减retainCountretainCount永远不会达到0,因为当它为1并调用release时,它立即调用dealloc而不减量retainCount帮自己一个忙并使用ARC。现在这是默认设置,建议几乎每个人都使用。帮自己一个忙,使用ARC。它现在是默认设置,并且建议几乎所有人使用。