为啥当我单击基于导航的应用程序上的后退按钮时未调用 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 函数的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin Master Detail prism 导航栏后退按钮