2014-10-27 44 views
2

我有些清理,需要在共享资源的任何时间我的视图控制器之一进行辞退/弹出/卸载?这可以是当用户点击该单独屏幕上的后退按钮或者如果对popToRootViewController进行调用(在这种情况下,我理想地能够清除每个被弹出的控制器)。你可以检测何时UIViewController已被解散或弹出?

明显的选择将在viewDidUnload中这样做,但当然,这不是卸载的工作方式。有没有办法将所有情况都捕获到ViewController从堆栈中移除的位置?

编辑:忘了提,我做这个使用Xamarin,这样可能会或可能不会影响到答案。

+0

此共享资源创建的地点/时间?需要做什么样的清理?而确实,当在应用程序中的任何视图控制器驳回做这方面的需求,或者只在特定视图控制器类的实例后果? – rmaddy 2014-10-27 18:53:29

+0

@rmaddy:在加载资源添加到ViewController。清理是资源上内部方法的一部分,它执行多个我不清楚的事情,但它应该被调用。它需要被称为每个单独的控制器被解雇。如果我回到屏幕上,该屏幕将需要调用该方法对资源的引用。如果我有4个屏幕深度并且调用popToRootViewController,那么弹出的3个屏幕都需要调用该方法。 – cain 2014-10-27 19:04:03

+0

然后'dealloc',由@SteveMadsen提到的,可能是最好的地方。 – rmaddy 2014-10-27 19:06:38

回答

6
override func viewDidDisappear(animated: Bool) { 
    if (self.isBeingDismissed() || self.isMovingFromParentViewController()) { 
     // clean up code here 
    } 
} 
+0

尽管这是推荐的方法(由Apple),但在我的代码中,当调用dismissViewController时它不起作用。也许这是因为我使用自定义解雇过渡。 – SoftDesigner 2016-11-03 15:32:26

-3
-(void) viewDidDisappear:(BOOL)animated{ 

} 
3

-dealloc可能是您最好的选择。视图控制器在从堆栈弹出时将被解除分配,除非您将它保留在别处。

viewWillDisappear:viewDidDisappear:都不是好的选择,因为他们被称为视图控制器不再显示,当推栈上别的东西(所以它成为第二从最顶部),包括任何时间。

viewDidUnload不再使用。系统框架从iOS 6起停止调用此方法。

相关问题