消息发送到解除分配的实例 - 程序暂停

时间:2012-08-22 02:46:40

标签: ios xcode

我在xcode上遇到了一些奇怪的行为。我没有完全得到错误,但代码执行在bkpt #207停止,没有给出堆栈跟踪。

在我的程序中,每当切换选项卡时,我都会使用popToRootViewController。我以编程方式从MyViewController(在堆栈中为第3个)弹出然后再次单击选项卡后发生上述行为。我可以确认正确弹出了MyViewController。

使用NSZombiesEnabled,我得到以下输出:

*** -[MyViewController tableView:titleForHeaderInSection:]: message sent to deallocated instance 0x6a4a00

我的预感是MyViewController的一些残余仍然链接到该标签栏。我正在使用[self.tabBarController setSelectedIndex:kOtherTab]以编程方式切换标签。

任何指针都会非常感激。

2 个答案:

答案 0 :(得分:4)

我在bkpt#207停止呼叫NSTimer:

[Timer invalidate];
[Timer release];

正确只是打电话

[Timer invalidate];

并且#207的停顿消失了。

  • invalidate包括发布。
  • 人们可能会因为向不存在的对象发送版本而收到SIGABRT或EXC_BAD_ACCESS错误。

答案 1 :(得分:1)

看起来tableview由于某种原因在委托被解除分配后调用它的委托(MyViewController)。

这里最好的办法是让MyViewController在取消分配时将tableView的委托设置为nil。