下面的代码 非常诡异,大家看一下
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
//测试内存是否泄露
NSMutableString *foo=[@"Julia!" mutableCopy] ;
[foo autorelease];
[foo appendString:@" I am happy"];
NSLog(@"%d", [foo retainCount]); //1
[pool release];
NSLog(@"%d", [foo retainCount]); //-1
我把foo 对象放在释放池里面了,然后将池释放之后,就变成-1 ,这时为什么???
由1到 -1 ,解释一下。
------解决方案--------------------
记得在某文档看到,不要相信retaincount
------解决方案--------------------
那我说一下,那个内存的release是需要时间的,是异步的,在真正释放前还要进行很多我们不知道的操作。具体什么东西,我们也不清楚。开源的BSD也没有看到啊
你在这个地方打印出来,说明在那时刻的一个状态,并不完全真实反应程序运行完毕的状态。如果能的话,Xcode就不会有内存泄露检查工具帮你检查了,你自己在末尾检查就可以。