弹出视图时(使用 UINavigationController)使 NSTimer 无效并释放
Posted
技术标签:
【中文标题】弹出视图时(使用 UINavigationController)使 NSTimer 无效并释放【英文标题】:Invalidate and release an NSTimer when popping a view (with a UINavigationController) 【发布时间】: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 无效并释放? 是否有一些自动调用的方法? (我试过了,但没有)
谢谢!
【问题讨论】:
【参考方案1】:您可以尝试使-viewWillDisappear
或viewDidDisappear
中的NSTimer
无效。
viewWillDisappear
:
当视图从其窗口中移除或被另一个视图覆盖时调用此方法。在实际移除或覆盖视图之前以及配置任何动画之前调用此方法。
子类可以覆盖此方法并使用它来提交编辑更改、退出视图的第一响应者状态或执行其他相关任务。例如,您可以使用此方法恢复对第一次呈现视图时在 viewDidDisappear: 方法中对状态栏的方向或样式所做的更改。如果你重写了这个方法,你必须在你的实现中调用 super。
查看UIViewController reference了解更多详情。
【讨论】:
【参考方案2】:很简单,就是这样:[//Your nstimer// invalidate];
【讨论】:
并且在这种情况下,只要您需要它发生,您就可以这样做 viewDidDissapear以上是关于弹出视图时(使用 UINavigationController)使 NSTimer 无效并释放的主要内容,如果未能解决你的问题,请参考以下文章
UITabbar 与 UINavigation Controller 视图重叠