2012-08-23 29 views
0

我决定在我一直在做的项目中使用故事板。当应用程序启动时,awakeFromNib然后viewDidLoad正确,但是当应用程序完成到另一个视图时,它不会调用viewDidUnload ,而且我认为它们也不是dealloc 。我已经使用了Apple的乐器,并没有显示任何内存泄漏。故事板和内存管理

只是要注意,我使用自定义的塞格斯并通过插入NSLog s转换的方法测试此。有没有其他人遇到过这个?

只是想更新:dealloc实际被调用但不viewDidUnload

回答

1

viewDidUnload方法仅用于didReceiveMemoryWarning的目的(即当视图正在被移除以恢复一些内存,但视图控制器不是时)。如果您希望在模拟器中运行时看到viewDidUnload,请将presentViewController推送到辅助视图,然后从模拟器的菜单中生成内存警告。我从UIViewController Class Reference引证:

当低内存条件发生并且不需要当前视图控制器的视图,该系统可以选择到从内存中删除这些看法。 [viewDidUnload方法]在视图控制器的视图被释放后调用,并且是您执行任何最终清理的机会。如果您的视图控制器存储对视图或其子视图的单独引用,则应该使用此方法来释放这些引用。您也可以使用此方法删除对您创建的任何对象的引用,以支持该视图,但现在视图不再需要时不再需要该对象。您不应该使用此方法来释放用户数据或任何其他无法轻易重新创建的信息。

在调用此方法时,视图属性为零。

+0

即使' - (无效)dealloc'不会被调用。什么时候通过'performSegue:WithIdentifier'方法加载一个特定的视图控制器,真的被释放? – tGilani

+1

@tGilani一个视图控制器将不会被释放,直到你解散或弹出它(例如调用'popViewControllerAnimated','dismissViewControllerAnimated'或调用一个展开的渐变)。其他不被释放的原因将包括您保留一些其他强参考或强参考周期(例如,由于使用重复的“NSTimer”)。 – Rob

+0

你可以在这里回答我的问题吗?http://stackoverflow.com/questions/15545423/storyboard-controllers-not-deallocating – tGilani

1

viewDidUnload视图时实际卸载时调用。如果您想在清理视图时清理资源,请将其放入viewDidDisappear

如果你想看到什么与viewDidUnload发生,运行你的应用程序在模拟器中,并从菜单栏中选择硬件|模拟内存警告。

在内存压力下,视图是在屏幕上不被除去,这是当在发送viewDidUnload方法。