首页 新闻 赞助 找找看

ReatinCount问题你碰到了吗???

0
悬赏园豆:20 [待解决问题]

 //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,第二次输出出错了????

一万年太久的主页 一万年太久 | 初学一级 | 园豆:180
提问于:2011-02-28 18:30
< >
分享
所有回答(2)
-1

出现这个现象是个随机问题,在[test release]后这个对象的引用计数是0了,此时垃圾收集器会工作,因此再访问[test retainCount]就会出现问题,因此这个对象已经可能无效了

之所以出现第一次正常,可能发生在垃圾收集器线程还没有来得及收集,因此偶尔正常;对象的引用计数是0后就不要再使用这个对象了

2012 | 园豆:21228 (高人七级) | 2011-03-01 15:01
你确定是这样,还是内部有什么机制???
支持(0) 反对(0) 一万年太久 | 园豆:180 (初学一级) | 2011-03-01 15:03
1

第二次的时候,对象已经彻底释放了,也就是不存在了,所以当然报错。

 

刚release后,确实是可以再引用一次的,我试过很多次,都是这样,貌似并不是随机出现的。所以最安全的办法是release后,再设置为nil,这样会强制将retainCount立即归零。

菩提树下的杨过 | 园豆:554 (小虾三级) | 2011-03-04 21:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册