主要代码是这样得:
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错误,求解答,谢了!
}

解决方案 »

  1.   

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

  2.   

    问题很有可能出自 NumberView 类
      

  3.   

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

  4.   

    使用NSZombie找出重复释放对象
      

  5.   

    scoresView的类成员是否有多次RELEASE?
      

  6.   

    retainCount这个值只是理论上的,在调试过程中,经常出现不正确的现象。
      

  7.   

    出现EXC_BAD_ACCESS一般都是因为对象本来已经被释放了,又来了一次release
      

  8.   

    在ReportScrollView.m 中scoresView release的地方 后面加一个 scoresView = nil 试一试   一般在viewUnload中这么干
      

  9.   

    大家好,问题已解决,是这样的, 我再addsubview的时候,通过alloc新申请的控件release了一下,而再dealloc函数中又release了一下,这样就导致了重复释放,控件在释放时调用[super dealloc]后会自动将内部的控件发送一个release消息,所以只需要在两个地方中的一个地方释放就可以了,要不时在addsubview之后,要么是在dealloc函数中,一般临时的是在addsubview之后释放,类的成员变量的话在dealloc中释放,不能两个地方都将释放操作,谢谢各位的解答,分数有限,我就按顺序给了!