【问题标题】:Objective-C - NSTimer still active when switched to another viewObjective-C - 切换到另一个视图时,NSTimer 仍然处于活动状态
【发布时间】:2011-08-15 22:54:18
【问题描述】:

我在我的第一个视图控制器上运行了一个计时器,然后我想切换到另一个视图控制器并且计时器仍在后台运行。

我怎样才能完全清理第一个视图控制器并启动第二个视图控制器。

SecondViewController *newView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[self presentModalViewController:newView animated:NO];
[newView release];

感谢您的帮助!

【问题讨论】:

标签: objective-c cocoa-touch nstimer switching


【解决方案1】:

这取决于您对视图的处理方式。如果您使用UITabBarControllerUINavigationController,您可能不想在启动第二个视图控制器时“清理”第一个视图控制器。你希望控制器来处理它。因此,如果您使用这些控制器中的任何一个,我建议您使用 UIViewController 的 viewWillDisappear: 方法在第一个视图消失时暂停计时器。

【讨论】:

  • 如他所说,使用 UIViewController 的 viewWillDisappear。
【解决方案2】:

我怀疑问题是您的第一个视图在内存中仍然存在(保留),因为您刚刚将第二个视图呈现为模态视图。第二个视图可以被忽略,因为父级仍然保留。

您需要做的可能是将计时器移至您的应用委托或单例类。然后给自己几个方法来随意启动/停止/暂停它。

或者,您可以简单地在第二个视图的 viewDidLoad 调用上暂停或停止计时器,然后在 viewDidUnload 上恢复或重新启动它。

您可以使用第二个视图控制器的 parentViewController 属性获取父视图。

【讨论】:

  • 好的,谢谢你的回答。但是没有办法清理 UIViewController 因为我没有使用它?计时器是在第一个 UIViewController 类中创建的。但也有使用应用程序(游戏)时自动创建的计时器
  • 不,您不能摆脱第一个视图控制器,因为它是 presentModal 关系中的父级。如果你想吹走你的第一个控制器,那么你应该使用 UITabBarController,然后制作第一个和第二个视图控制器选项卡。
  • iPhone 应用程序中的 ViewController 比您在 Web 编程中所习惯的要多得多的链接在一起。 :)
  • 好的,谢谢。当我使用上面的代码切换到第二个视图控制器,然后使用相同的代码切换回第一个视图控制器时。然后第一个视图控制器不是两次活动?
  • 你不会再展示模态视图了。这是问题的链接Is there a good UITabBarController example?
猜你喜欢
  • 2011-08-19
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多