弹出视图时无效并释放NSTimer(使用UINavigationController)

时间:2011-07-13 15:45:32

标签: iphone uinavigationcontroller release nstimer invalidation

我正在使用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无效并释放NSTimer? 是否有一些自动调用的方法? (我试过但没什么)

谢谢!

2 个答案:

答案 0 :(得分:1)

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

viewWillDisappear

  

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

     

子类可以覆盖此方法并使用它来提交编辑更改,重新调整视图的第一个响应者状态或执行其他相关任务。例如,您可以使用此方法还原对视图首次显示时在viewDidDisappear:方法中创建的状态栏方向或样式的更改。如果重写此方法,则必须在实现中的某个时刻调用super。

有关详细信息,请查看UIViewController reference

答案 1 :(得分:0)

很简单,就像这样:[//你的nstimer //无效];