在这里找到一个奇怪的代码 我有一个viewcontroller,它有一个带书籍的数组,然后点击单元格,然后推送到detailViewController,detailVC有一个变量infoDict,
@property (nonatomic,retain) NSMutableDictionary * infoDict;
navigationController push
DetailViewController * tDVC = [[DetailViewController alloc] init];
tDVC.infoDict = infoDict;
[self.navigationController pushViewController:tDVC animated:YES];
[tDVC release];
点击后退按钮,弹回,以及DetailVC内部dealloc
-(void)dealloc
{
[super dealloc];
NSLog(@"before %d",infoDict.retainCount);
[infoDict release];
}
但是当我点击回来时,在这个dealloc应用程序中随机崩溃,EXC_BAD_ACCESS。
当将[super dealloc]移动到dealloc的底部时,它似乎恢复正常。 请帮助我理解这一点,非常感谢
答案 0 :(得分:4)
[super dealloc]
释放对象本身。如果您输入dealloc
并让Xcode自动填充,则可以获得此信息:
- (void)dealloc
{
<#deallocations#>
[super dealloc];
}
意味着您应该在调用[super dealloc]
答案 1 :(得分:2)
您的-dealloc
实施失灵了。对-[super dealloc]
的调用必须是dealloc
方法中的绝对最后一次调用。当您访问ivar infoDict
时,编译器实际上正在执行类似self->infoDict
的操作,此时,self
已被释放并且不再有效。
如果可能的话,我建议使用ARC
而不是手动管理内存。
答案 2 :(得分:-1)
尝试
如果您使用self.infoDict = nil;
代替[infoDict rlease];
-(void)dealloc
{
NSLog(@"before %d",infoDict.retainCount);
[infoDict release];
[super dealloc];
}