[super dealloc]出现EXC_BAD_ACCESS是什么原因

iOS 码拜 9年前 (2015-05-06) 466次浏览 0个评论
 

   主要代码是这样得:
ReportScrollView.h文件
    NumberView              *scoresView;//总分数View.NumberView是自定义控件

ReportScrollView.m文件
    -(void)initData
{
    
    //加入分数
    scoresView = [[NumberView alloc]initWithFrame:CGRectMake(0,0,100,100)];
    [scoresView setNum:90];
    [self addSubview:scoresView];
}
//数据释放
-(void)dealloc
{
    if(scoresView != nil)
        [scoresView release];
    [super dealloc];
}

NumberView.m

– (void)dealloc {
    [super dealloc];//运行到这里,出现EXC_BAD_ACCESS错误,求解答,谢了!
}

[super dealloc]出现EXC_BAD_ACCESS是什么原因
3分
出现这个问题一般是由过多的对一块内存调用release的原因,也就是说,当对一个内存计数器已经是0的内存再次调用release,就会出这个问题,所以,请确认scoresView是否多次释放了?专门检查release.
[super dealloc]出现EXC_BAD_ACCESS是什么原因
3分
问题很有可能出自 NumberView 类
[super dealloc]出现EXC_BAD_ACCESS是什么原因
引用 1 楼 nicktang 的回复:

出现这个问题一般是由过多的对一块内存调用release的原因,也就是说,当对一个内存计数器已经是0的内存再次调用release,就会出这个问题,所以,请确认scoresView是否多次释放了?专门检查release.

但是 [scoresView release];之前我打印retainCount,的值是1,释放后变为0,所以才自动调用scoresView的dealloc函数的,我不明白的是[super dealloc];到底做了什么操作,他的机制是什么,我把scoreViewdealloc内的[super dealloc]注释掉后就没有这个问题了,但担心会出现内存泄漏

[super dealloc]出现EXC_BAD_ACCESS是什么原因
3分
使用NSZombie找出重复释放对象
[super dealloc]出现EXC_BAD_ACCESS是什么原因
3分
scoresView的类成员是否有多次RELEASE?
[super dealloc]出现EXC_BAD_ACCESS是什么原因
3分
retainCount这个值只是理论上的,在调试过程中,经常出现不正确的现象。
[super dealloc]出现EXC_BAD_ACCESS是什么原因
3分
出现EXC_BAD_ACCESS一般都是因为对象本来已经被释放了,又来了一次release
[super dealloc]出现EXC_BAD_ACCESS是什么原因
2分
在ReportScrollView.m 中scoresView release的地方 后面加一个 scoresView = nil 试一试   一般在viewUnload中这么干
[super dealloc]出现EXC_BAD_ACCESS是什么原因
大家好,问题已解决,是这样的, 我再addsubview的时候,通过alloc新申请的控件release了一下,而再dealloc函数中又release了一下,这样就导致了重复释放,控件在释放时调用[super dealloc]后会自动将内部的控件发送一个release消息,所以只需要在两个地方中的一个地方释放就可以了,要不时在addsubview之后,要么是在dealloc函数中,一般临时的是在addsubview之后释放,类的成员变量的话在dealloc中释放,不能两个地方都将释放操作,谢谢各位的解答,分数有限,我就按顺序给了!

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明[super dealloc]出现EXC_BAD_ACCESS是什么原因
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!