主要代码是这样得: ReportScrollView.m文件 NumberView.m – (void)dealloc { |
|
3分 |
出现这个问题一般是由过多的对一块内存调用release的原因,也就是说,当对一个内存计数器已经是0的内存再次调用release,就会出这个问题,所以,请确认scoresView是否多次释放了?专门检查release.
|
3分 |
问题很有可能出自 NumberView 类
|
但是 [scoresView release];之前我打印retainCount,的值是1,释放后变为0,所以才自动调用scoresView的dealloc函数的,我不明白的是[super dealloc];到底做了什么操作,他的机制是什么,我把scoreViewdealloc内的[super dealloc]注释掉后就没有这个问题了,但担心会出现内存泄漏 |
|
3分 |
使用NSZombie找出重复释放对象
|
3分 |
scoresView的类成员是否有多次RELEASE?
|
3分 |
retainCount这个值只是理论上的,在调试过程中,经常出现不正确的现象。
|
3分 |
出现EXC_BAD_ACCESS一般都是因为对象本来已经被释放了,又来了一次release
|
2分 |
在ReportScrollView.m 中scoresView release的地方 后面加一个 scoresView = nil 试一试 一般在viewUnload中这么干
|
大家好,问题已解决,是这样的, 我再addsubview的时候,通过alloc新申请的控件release了一下,而再dealloc函数中又release了一下,这样就导致了重复释放,控件在释放时调用[super dealloc]后会自动将内部的控件发送一个release消息,所以只需要在两个地方中的一个地方释放就可以了,要不时在addsubview之后,要么是在dealloc函数中,一般临时的是在addsubview之后释放,类的成员变量的话在dealloc中释放,不能两个地方都将释放操作,谢谢各位的解答,分数有限,我就按顺序给了!
|