我决定在我一直在做的项目中使用故事板。当应用启动时,它会执行awakeFromNib
然后viewDidLoad
的正确操作,但是当应用完成到另一个视图的segueing时,它不会调用viewDidUnload
,而且想想,dealloc 也不会。我使用过Apple的仪器,并没有显示任何内存泄漏。
请注意,我使用自定义segues并通过在方法中插入NSLog
来测试它。还有其他人遇到过这个吗?
只是想要更新:dealloc
实际上已被调用,但不是viewDidUnload
。
答案 0 :(得分:1)
viewDidUnload
。如果您想在未显示视图时清理资源,请将其放在viewDidDisappear
。
如果您想查看viewDidUnload发生的情况,请在模拟器中运行您的应用程序,然后从菜单栏中选择“硬件”。模拟内存警告。
在内存压力下,屏幕上不存在的视图将被删除,即发送viewDidUnload
方法的时间。
答案 1 :(得分:1)
viewDidUnload
方法仅用于didReceiveMemoryWarning
的目的(即删除视图以恢复某些内存,但视图控制器不是)。如果您想在模拟器中运行时看到viewDidUnload
,请将pushViewController推送到辅助视图,然后从模拟器的菜单中生成内存警告。我引用了UIViewController Class Reference:
当发生内存不足并且不需要当前视图控制器的视图时,系统可能会选择从内存中删除这些视图。 [视图控制器的视图发布后调用
viewDidUnload
方法],您有机会执行任何最终清理。如果视图控制器存储对视图或其子视图的单独引用,则应使用此方法来释放这些引用。您还可以使用此方法删除对您为支持视图而创建的任何对象的引用,但现在视图已不再需要。您不应使用此方法来释放用户数据或任何其他无法轻松重新创建的信息。在调用此方法时,view属性为nil。