我有一些清理需要在我的一个视图控制器被解除/弹出/卸载时在共享资源中执行?这可能是当用户点击单个屏幕上的后退按钮或者调用popToRootViewController时(在这种情况下,我理想情况下可以清除弹出的每个控制器。)
显而易见的选择是在viewDidUnload中执行此操作,但当然,这并不是卸载的工作方式。有没有办法捕获ViewController从堆栈中删除的所有情况?
编辑:忘记提及我使用Xamarin这样做,这可能会或可能不会影响答案。
答案 0 :(得分:13)
override func viewDidDisappear(animated: Bool) {
if (self.isBeingDismissed() || self.isMovingFromParentViewController()) {
// clean up code here
}
}
答案 1 :(得分:5)
-dealloc
可能是你最好的选择。视图控制器在从堆栈中弹出时将被释放,除非您将其保留在其他位置。
viewWillDisappear:
和viewDidDisappear:
不是很好的选择,因为它们在视图控制器不再显示时被调用,包括它在堆栈上推送其他内容时(因此它成为第二个 - 的顶)。
viewDidUnload
已不再使用。从iOS 6开始,系统框架停止调用此方法。
答案 2 :(得分:1)
根据@Enricoza 的评论,如果您确实将 UIViewController 嵌入到 UINavigationController 中,请尝试以下操作:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if ((navigationController?.isBeingDismissed) != nil) {
// Add clean up code here
}
}
答案 3 :(得分:-3)
-(void) viewDidDisappear:(BOOL)animated{
}