如何在弹出导航后从UIViewController释放内存

时间:2013-09-25 02:37:00

标签: ios objective-c ios6

在我的应用程序中,我有点跳转导航,这里是我的导航功能的粗略轮廓

登录 - >主屏幕 - >设置

从设置中,我想要一个返回登录页面的注销。我是这样做的:

UIViewController* requireController = [[[self navigationController] viewControllers] objectAtIndex:0];
[[self navigationController] popToViewController:requireController animated:YES];

这会让我回到登录页面。但是,我想在主屏幕中发布一些内容,例如我有一个每10秒运行一次任务的计时器,它继续运行(我可以在日志中看到它)。从iOS6开始,viewDidUnload显然不再被调用。 viewDidDisapear也不是很正确,因为在进入设置时也会调用它。

我应该在这里做些什么来摆脱主视图控制器中的一些任务?

3 个答案:

答案 0 :(得分:1)

在您的注销视图控制器上设置协议。在弹回main之前,请使用您创建的协议(委托)调用某种方法来重置该视图控制器的状态。关于VC的主要实现方法。在告诉代表做任何事情之后,然后弹出登录VC。

以下是此模式的基础知识。 http://iosdevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html

答案 1 :(得分:1)

我要使用NSNotificationCenter或使用- (void)viewDidDisappear:(BOOL)animated的{​​{1}}方法。

答案 2 :(得分:1)

您可以使用popToRootViewControllerAnimated:方法直接跳转到根视图控制器,在您的情况下是Login控制器。如果您没有在代码中的任何位置保留主屏幕或设置控制器,那么移动到根视图控制器将调用视图控制器上的dealloc方法从导航堆栈中删除。

您可以覆盖主屏幕控制器中的dealloc并释放资源。请记住,如果您使用ARC,请不要拨打[super dealloc],因为它会给出错误。但是,如果您手动管理内存,请确保在dealloc结束时添加呼叫。

希望有所帮助!