【问题标题】:Invalidate and release an NSTimer when popping a view (with a UINavigationController)弹出视图时(使用 UINavigationController)使 NSTimer 无效并释放
【发布时间】:2011-07-13 15:45:31
【问题描述】:

我正在使用 UINavigationController:在我的第一个视图中,有一个 UIButton 使用此代码推送另一个视图

- (IBAction)gototrack:(id)sender {
    map *map2 = [[map alloc] initWithNibName:@"map" bundle:[NSBundle mainBundle]];
    [self.navigationController pushViewController:map2 animated:YES];
    [map2 release];
}

在第二个视图中,有一张地图,指示对象的位置。 这个对象移动得很快,所以我需要每秒刷新一次位置:我正在使用 NSTimer 执行此操作,它调用计算新坐标并刷新地图的方法。 好的,一切正常,但是当用户弹出视图(使用 NavigationBar 中的常用按钮)时,无法释放第二个视图,因为 NSTimer 仍在工作!

当用户弹出第二个视图时,我该怎么做才能使 NSTimer 无效并释放? 是否有一些自动调用的方法? (我试过了,但没有)

谢谢!

【问题讨论】:

    标签: iphone uinavigationcontroller release nstimer invalidation


    【解决方案1】:

    您可以尝试使-viewWillDisappearviewDidDisappear 中的NSTimer 无效。

    viewWillDisappear:

    当视图从其窗口中移除或被另一个视图覆盖时调用此方法。在实际移除或覆盖视图之前以及配置任何动画之前调用此方法。

    子类可以覆盖此方法并使用它来提交编辑更改、退出视图的第一响应者状态或执行其他相关任务。例如,您可以使用此方法恢复对第一次呈现视图时在 viewDidDisappear: 方法中对状态栏的方向或样式所做的更改。如果你重写了这个方法,你必须在你的实现中调用 super。

    查看UIViewController reference了解更多详情。

    【讨论】:

      【解决方案2】:

      很简单,就是这样:[//Your nstimer// invalidate];

      【讨论】:

      • 并且在这种情况下,只要您需要它发生,您就可以这样做 viewDidDissapear
      猜你喜欢
      • 1970-01-01
      • 2017-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      相关资源
      最近更新 更多