//Test类是自定义的一个类,里面什么都没写,是自动生成的!
Test* test=[[Test alloc] init];
NSLog(@"before release: %d",[test retainCount]);
[test release];
NSLog(@"release1 %d",[test retainCount]);
NSLog(@"release1 %d",[test retainCount]);
NSLog(@"Hello,World!");
输出结果为:
2011-02-28 18:27:33.137 kibernet[2850:a0f] release 1
2011-02-28 18:27:33.138 kibernet[2850:a0f] release1 1
Current language: auto; currently objective-c
Program received signal: “EXC_BAD_ACCESS”.
请教:为什么test释放后,引用计数器值为1,第一次可以输出1,第二次输出出错了????
出现这个现象是个随机问题,在[test release]后这个对象的引用计数是0了,此时垃圾收集器会工作,因此再访问[test retainCount]就会出现问题,因此这个对象已经可能无效了
之所以出现第一次正常,可能发生在垃圾收集器线程还没有来得及收集,因此偶尔正常;对象的引用计数是0后就不要再使用这个对象了
第二次的时候,对象已经彻底释放了,也就是不存在了,所以当然报错。
刚release后,确实是可以再引用一次的,我试过很多次,都是这样,貌似并不是随机出现的。所以最安全的办法是release后,再设置为nil,这样会强制将retainCount立即归零。