0

我正在制作一个游戏,我有这样的视图控制器方案 1(菜单)--> 2(级别选择)-> 3 级(带有计时器等)---> 死亡或赢得 4 完成--> 再次 2。我所做的我创建了将所有这些视图控制器保存在数组中的单例类,并在需要时将它们设置为 rootViewControllers。但是我有以下问题:当我退出 3 并转到 4 时,我将 3 设置为nil但似乎 3 仍在工作(计时器正在控制台中打印消息)并且没有被释放。也许我不了解视图控制器,当您将另一个设置为 rootViewController 时会发生什么?

4

2 回答 2

0

你真的不应该rootViewControllers这么频繁地切换。在大多数情况下,您将一个控制器设置为整个应用程序的根。您应该做的是使用 aUINavigationController来管理您的UIViewControllers. 一旦您将程序嵌入到 a 中UINavigationController,您所要做的就是推入和弹出导航控制器的堆栈。看看这几个方法:

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated

- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated

- (UIViewController *)popViewControllerAnimated:(BOOL)animated

类似地,您可以使用 push segue 将 View Controller 添加到堆栈中(通常从情节提要初始化(如果您正在使用))

您可以在此处了解更多信息:http UINavigationController: //developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html

于 2012-07-25T23:46:04.070 回答
0

在您的情况下,由于您对视图控制器(在数组中)有一个强引用,它的视图将被切换出来,但控制器仍然存在,所以如果您从该控制器启动了一个计时器,它将继续运行。至于计时器,我认为您应该在#3 视图控制器的 viewDidDisappear 方法中使其无效——这应该可以解决问题。

于 2012-07-25T23:48:58.573 回答