下面的代码 非常诡异,大家看一下      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 ,解释一下。

解决方案 »

  1.   

    放在非Main的一个函数里面,都是1
      

  2.   

    记得在某文档看到,不要相信retaincount
      

  3.   

    你好, 我没看懂你的意思, 能解答一下吗。。 为什么 非main里面都是1
      

  4.   

    刚才群里有人说,不能相信retaincount,  也是出现过类似的诡异问题,谢谢你的回复
      

  5.   

    那我说一下,那个内存的release是需要时间的,是异步的,在真正释放前还要进行很多我们不知道的操作。具体什么东西,我们也不清楚。开源的BSD也没有看到啊
    你在这个地方打印出来,说明在那时刻的一个状态,并不完全真实反应程序运行完毕的状态。如果能的话,Xcode就不会有内存泄露检查工具帮你检查了,你自己在末尾检查就可以。
      

  6.   

    [pool release];后foo被释放,这时你再对foo的操作都是非法的。可能偶尔不会崩溃但难以确保!