另一个益智游戏.我有一个NSArray(iTours),包含3个对象,保留计数为1.
此数组在对象dealloc方法中发布,如下所示:
- (void)dealloc {
NSLog(@"retain count für iTouren: %d", [iTours retainCount]);
[iTours release]; // triggers EXC_BAD_ACCESS
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
控制台窗口显示以下消息(无更多详细信息):
程序接收信号:"EXC_BAD_ACCESS".
发生了什么事情的线索?我错过了什么?
bbu*_*bum 18
最有可能的是,你过度释放iTouren,因此,这种调用release导致了崩溃.也就是说,iTouren当你释放包含数组时,以及当包含数组发送release到已经解除分配iTouren的应用程序崩溃时,已经解除分配.
(当然,iTours可能是已经解除分配的对象.无论如何,这是一个过度释放的问题.)
打开僵尸检测,看看是否可以解决特定问题.
请注意
retainCount是无用的在这种情况下,release对象的final 不会减少保留计数.为什么?因为无论如何,当对象即将被解除分配时,这将是一个浪费的循环.retainCount返回0 是不可能的,因为根据定义,保留计数为0的对象已经被释放,因此,无论如何不再是可行的消息接收者.
| 归档时间: |
|
| 查看次数: |
1416 次 |
| 最近记录: |