6

我以前从未亲眼见过didReceiveMemoryWarning电话。在调用它的地方是否存在已知的内存使用阈值?

4

3 回答 3

9

当系统内存不足时调用它,然后您需要清除UIViewController.

您可以在模拟器中模拟内存警告:Hardware > Simulate Memory Warning看看会发生什么。

如果您支持 iOS6 的早期版本,请务必注意Apple 文档中的以下内容:

在 iOS 6 之前,当发生内存不足警告时,如果 UIViewController该类知道以后可以重新加载或重新创建它们,就会清除其视图。如果发生这种情况,它还会调用 viewWillUnloadviewDidUnload方法,让您的代码有机会放弃与视图层次结构关联的任何对象的所有权,包括从 nib 文件加载的对象、在您的viewDidLoad方法中创建的对象以及在运行时延迟创建的对象并添加到视图层次结构中。在 iOS 6 上,视图永远不会被清除,并且这些方法永远不会被调用。如果您的视图控制器需要在内存不足时执行特定任务,它应该覆盖该 didReceiveMemoryWarning方法。

关于阈值,我尽量不超过 12MB 的内存。

于 2012-10-19T08:38:25.790 回答
2

不可以,当springboard感觉设备内存占用资源过多时调用。取决于其他应用程序在您的手机上使用了多少东西,它迟早会发生。你永远无法可靠地计算或依赖它何时会发生。

另请注意,因为分配等工具中报告的内存不一定与您的应用程序的占用空间相关,因此看起来您使用的不多,但您仍可能收到此警告。

于 2012-10-19T06:59:04.183 回答
2

从文档中,当系统确定可用内存量很低时,就会调用此方法。系统自己确定内存不足,当您的应用程序分配超过您的应用程序可用的内存量时,会调用此方法。请参考http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html

于 2012-10-19T07:24:50.273 回答