obj_msgSend中的EXC_BAD_ACCESS isKindOfClass:

时间:2011-11-17 00:06:53

标签: objective-c ios gdb exc-bad-access

第二次尝试将某个视图添加为子视图时,我遇到了崩溃。崩溃发生在这里:

-(void)AddAsScrollableSubContext:(UIView*)view {
    [pExtendedScrollableSubContextBounds addSubview: view]; //CRASH HERE
    pSubScroll.userInteractionEnabled = true;
}

我第二次打电话......

[mSongContext AddAsScrollableSubContext:pEQRoot];

流程是

[mSongContext AddAsScrollableSubContext:pEQRoot];
...Load a lot of stuff
...Press a Button
...Unload a lot of stuff
[pEQRoot removeFromSuperview];
...Press a Button
[mSongContext AddAsScrollableSubContext:pEQRoot];

当我得到错误的访问权限时,callstack如下所示: Callstack

两个对象(pExtendedScrollableSubContextBounds和pEQRoot)似乎都有效。将其他子视图添加到pExtendedScrollableSubContextBounds可以正常工作,并且在pEQRoot(子视图,帧)上调用其他操作也可以正常工作。

我在objsend中读到了r0是对象而r1是选择器所以我查看了r1的内存地址并看到了......

memdump

这感觉就像我在某个地方的垃圾记忆isKindOfClass:但我不太确定。有人能指点我关于iOS obj_msgsend的更多信息吗?有没有办法设置一个观察点来捕捉这个记忆垃圾发生时?

1 个答案:

答案 0 :(得分:0)

使用NSZombies解决问题。

稍微不相关的说明,有一个经验法则 - NARC代表新的,分配,保留,复制。如果方法调用包含任何这些关键字,那么我们拥有该对象的所有权,然后我们应该释放该对象。