如何在弹出导航控制器后释放UIViewController的内存

3
在我的应用中,我有一些导航跳转。以下是我的导航大致的流程:
登录 -> 主屏幕 -> 设置
在设置中,我想要一个注销按钮,可以返回到登录页面。我是这样实现的:
UIViewController* requireController = [[[self navigationController] viewControllers] objectAtIndex:0];
[[self navigationController] popToViewController:requireController animated:YES];

这确实会将我带回登录页面。但是,我想在主屏幕中释放一些东西,例如我有一个定时器,每10秒运行一次任务,它继续运行(我可以在日志中看到)。显然,自iOS6以来不再调用viewDidUnload方法。viewDidDisappear方法也不是很正确,因为当进入设置时也会被调用。
在这种情况下,我应该怎么做才能摆脱主视图控制器中的一些任务呢?

你可以使用 NSNotificationCenter 发送 NSNotification,观察该通知,然后在接收到通知时告诉你的 MainScreen 控制器停止计时器。 - Zhang
使用主屏幕视图控制器的-(void)dealloc怎么样? - Kyokook Hwang
所有的好答案,我最终选择了dealloc,谢谢大家! - Jameo
3个回答

1

1
我会使用NSNotificationCenter或者使用UIViewController- (void)viewDidDisappear:(BOOL)animated方法。

1
您可以使用popToRootViewControllerAnimated:方法直接跳转到根视图控制器,例如登录控制器。如果您在代码中没有保留主屏幕或设置控制器,则移动到根视图控制器将调用从导航堆栈中删除的视图控制器上的dealloc方法。
您可以重写主屏幕控制器中的dealloc并释放资源。请记住,如果您正在使用ARC,请不要调用[super dealloc],因为这会导致错误。但是,如果您手动管理内存,请确保在dealloc的末尾添加该调用。
希望能对您有所帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接