为啥当我单击基于导航的应用程序上的后退按钮时未调用 viewdidunload 函数

Posted

技术标签:

【中文标题】为啥当我单击基于导航的应用程序上的后退按钮时未调用 viewdidunload 函数【英文标题】:why is viewdidunload function not called when i click back button on navigation based app为什么当我单击基于导航的应用程序上的后退按钮时未调用 viewdidunload 函数 【发布时间】:2011-03-08 10:21:40 【问题描述】:

您好,我想发布我的fetchedResultsController

我想知道为什么当我在基于导航的应用程序上按下返回按钮时没有调用viewdidunload。或者我​​应该在其他地方释放它?

感谢帮助

【问题讨论】:

【参考方案1】:

-viewDidUnload 只保证在视图从内存中被清除时被调用,如果用户返回那里,UIKit 框架可能会挂在它上面以便快速呈现视图。要在视图消失时确定性地释放获取的结果控制器,请使用 -viewWillDisappear:-viewDidDisappear:

【讨论】:

感谢您的快速回答,我投票赞成,我尝试并接受,再次感谢【参考方案2】:

如果您认为由于未调用 viewDidLoad 而导致泄漏,请检查您的 controller.view removeFromSuperView 调用并确保您使用的是 removeFromParentViewController。不要仅仅从父视图中删除视图,而是从其父控制器中删除您的视图控制器。

【讨论】:

【参考方案3】:

我看到在我的情况下发生了一些奇怪的事情:dealloc 被调用但 viewDidUnload 没有。

但出于内存管理的目的,我认为我可以忍受它,因为那时我所有的强属性都将被释放(我正在使用 ARC)。

在您的情况下,我认为您还应该检查 dealloc 是否被调用并在那里释放您的 fetchedResultsController

【讨论】:

【参考方案4】:

您可以通过-dealloc自己调用它。

【讨论】:

这样做有正当理由吗? 错了,dealloc也不能保证被调用!这就是为什么,有什么正当理由吗?

以上是关于为啥当我单击基于导航的应用程序上的后退按钮时未调用 viewdidunload 函数的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式调用 iOS 上的导航控制器后退按钮

Xamarin Master Detail prism 导航栏后退按钮

为啥当我单击目标 c 中的按钮时未从 tableViewCell 获取文本字段数据?

按下后退按钮时,前一个屏幕上的导航标题消失

Flutter单击后退按钮时如何执行

我可以用 xcode 中的“导航控制器后退按钮”传递数据吗