Ios 是否无意中双重解除分配对象?

Ios 是否无意中双重解除分配对象?,ios,objective-c,memory-management,nszombie,Ios,Objective C,Memory Management,Nszombie,我有一个选项卡栏应用程序,其中一个选项卡栏中有7个独立的UISwitch实例。当我运行应用程序并使用开关转到选项卡栏时,我会调用 [self dismissModalViewControllerAnimated:YES completion:nil]; 然后我打电话 [self presentModalViewController:myController animated:YES completion:nil]; 当我使用7ui开关返回到同一选项卡栏时,我触摸其中一个,改变状态,应用程序崩

我有一个选项卡栏应用程序,其中一个选项卡栏中有7个独立的UISwitch实例。当我运行应用程序并使用开关转到选项卡栏时,我会调用

[self dismissModalViewControllerAnimated:YES completion:nil];
然后我打电话

[self presentModalViewController:myController animated:YES completion:nil];
当我使用7
ui开关返回到同一选项卡栏时,我触摸其中一个,改变状态,应用程序崩溃。因此,我启用了
NSZombie
对象并再次运行该应用程序,这次当它崩溃时,它给出了错误消息

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

这意味着对象是双重释放的,我显然没有尝试这样做。因此,我做了一些研究,发现我可以通过使用Xcode内置工具,使用
NSZombie
模板分析应用程序,找到导致其双重释放的代码行。然后我故意导致应用程序崩溃,我收到了这个消息。

我可以清楚地看到,我的ChessTimer库释放对象的次数太多,导致它加倍释放。因此,我接下来查看了执行此操作的确切代码行,发现了以下内容


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

您为什么打电话给dismissViewController?你在那一点上提出了什么吗?是的,那令人困惑。“然后看一下选项卡栏控制器”是什么意思?在您刚刚演示了一个视图控制器之后,您如何看待它?很抱歉,让我尝试重新解释一下,因为我之前的尝试非常糟糕。因此,当我运行应用程序时,我首先显示选项卡栏视图控制器。然后,我使用UISwitchs进入选项卡栏,将一个或两个选项的状态从“开”更改为“关”。然后,我关闭选项卡栏视图控制器。之后,我将展示相同的选项卡栏视图控制器。当我现在更改其中一个开关的值时,应用程序崩溃,显示我上面显示的所有图像/错误消息。你真的显示了“相同”的选项卡栏控制器吗?您保留对它的引用并使用它而不是创建新实例?对不起,我指的是选项卡栏控制器的新实例。有什么建议吗?