Objective c 为什么我在基于导航的应用程序上单击“后退”按钮时未调用viewdidunload函数

Objective c 为什么我在基于导航的应用程序上单击“后退”按钮时未调用viewdidunload函数,objective-c,cocoa,nsfetchedresultscontroller,Objective C,Cocoa,Nsfetchedresultscontroller,嗨,我想释放我的fetchedResultsController 我想知道为什么当我按下基于导航的应用程序上的后退按钮时,viewdidunload没有被调用。或者我应该在其他地方释放它 感谢您的帮助-viewDidUnload仅保证在从内存中清除视图时调用,并且如果用户返回视图,UIKit框架可能会挂在视图上以快速显示视图。要在视图消失时决定性地释放所获取的结果控制器,请使用-viewwilldemouse:或-viewdiddemouse:如果您认为由于未调用viewDidLoad而导致泄漏

嗨,我想释放我的
fetchedResultsController

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


感谢您的帮助

-viewDidUnload
仅保证在从内存中清除视图时调用,并且如果用户返回视图,UIKit框架可能会挂在视图上以快速显示视图。要在视图消失时决定性地释放所获取的结果控制器,请使用
-viewwilldemouse:
-viewdiddemouse:
如果您认为由于未调用viewDidLoad而导致泄漏,您可以从
-dealoc
中自己调用它,然后检查controller.view removeFromSuperView调用,并确保使用的是removeFromParentViewController。不只是从superview中删除视图,而是从其父控制器中删除viewController。

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

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


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

谢谢您的快速回答我投票赞成,我尝试了,然后接受,再次感谢。有没有一个有效的理由这样做?错了,dealloc也不能保证被调用!这就是为什么,有什么正当的理由吗?