一个对象被无意中双重释放?

时间:2013-08-02 05:15:53

标签: ios objective-c memory-management nszombie

我有一个标签栏应用程序,在一个标签栏中,有7个单独的UISwitch实例。当我运行应用程序并使用开关转到标签栏时,我会调用

[self dismissModalViewControllerAnimated:YES completion:nil];

然后我打电话给

[self presentModalViewController:myController animated:YES completion:nil];

当我使用7 UISwitch es返回相同的标签栏并触摸其中一个时,更改状态,应用程序崩溃。所以我启用了NSZombie个对象并再次运行应用程序,这次崩溃时,它给出了错误消息

[UICGColor retain]:发送到解除分配的实例0x9ace8a0的消息

这意味着对象被双重释放,我显然没有尝试这样做。所以,我做了一些研究,发现我可以通过使用Xcode内置工具使用NSZombie模板对应用程序进行分析,找到导致它重新分配的代码行。然后我故意导致应用程序崩溃,我收到了这个。 enter image description here

我可以清楚地看到我的ChessTimer库多次释放该对象,导致它被双重释放。所以,我接下来查看了执行此操作的代码的确切行,并找到了此enter image description here

我现在可以看到直接导致问题的代码行。当我删除它们,该应用程序运行正常。但问题是,这些代码行是我必须保留的应用程序中的一个重要设计元素。我甚至不知道为什么这些代码行导致应用程序再次释放该对象。我怎样才能中和这种释放或找到另一种解决方法?感谢所有帮助。

0 个答案:

没有答案