iPhone应用程序 - 解雇模态视图控制器不会解除它

时间:2011-07-11 03:52:42

标签: iphone ios uiview uiviewcontroller

我有一个UIViewController(称之为NumberTwo),我把它作为另一个UIViewController的模态视图控制器(称之为NumberOne)。 NumberTwo包含一个touchesBegan方法,用于监听触摸,它还有一个加速计方法,用于监听x,y或z方向的设备方向变化。 NumberTwo有一个名为“Done”的按钮,当点击时,它将自己视为模态视图控制器:

[self dismissModalViewControllerAnimated:NO];

但似乎它仍然在倾听触摸,而且它仍在倾听加速度。当我解雇它时,我怎么能完全释放NumberTwo?我尝试添加一个发布调用,如下所示:

[self dismissModalViewControllerAnimated:NO];
[self release];

但是这导致了EXEC_BAD_ACCESS。

3 个答案:

答案 0 :(得分:3)

您出示后是否释放了控制器?例如。在呈现它的NumberOneController中的方法中,你有类似的东西:

NumberTwoController * controller = [NumberTwoController alloc] init];
// do stuff to config controller
[self presentModalViewController: controller];
[controller release];

除非你想继续NumberTwoController重复使用,否则这将是通常的模式。 presentModalViewController方法可确保控制器在使用时保留。然后,在NumberTwoController内,您调用[self dismissModalViewControllerAnimated: NO]

时,应该对其进行整理

答案 1 :(得分:3)

我有一个非常类似的问题困扰了我好几天。事实证明,当我解除它时,我的视图控制器类没有被释放,因为该视图控制器有一个未被无效(停止)的活动NSTimer。我能够在viewDidDisappear中杀死计时器。

答案 2 :(得分:1)

确保释放完成后使用的所有内容;仅当dealloc及其所有属性/对象不再使用时,才会调用UIViewController方法。在完成之后,切勿使用您需要的[self release];从创建它的视图控制器中释放它。